Gå til innhold

Anbefalte innlegg

Heisan

Jeg har et program som kan starte opp en masse forskjellige FORM's. I en av disse formene, la oss kalle den Kontrolpanel, så skal jeg, når bruker trykker på en knapp, starte et eksternt program. Oppstarten av dette eksterne programmet er allerede definert i den globale delen av programmet.

 

Jeg trenger å gi beskjed oppover i programmet om hva som skal skje. Derfor tenkte jeg at jeg kunne sende en event. Jeg vet bare ikke hvordan jeg skal gjøre dette. I tillegg så er "kontrolpanelet" definert i en egen CLASS DLL og det er den globale EXE fila som bruker denne dLL'en. Derfor kan jeg ikke kalle direkte. Sett at det er slik:

 

EXE FILE (Refererer til Kontrolpanel)
class main
{
 public Kontrolpanel ThisKontrolPanel = new Kontrolpanel();
 public void StartEtProgram(string ProgName)
 {
// Kode som starter programmet
 }
}

DLL FILE
public class Kontrolpanel
{
 public void OnKnappSomStarterProgram()
 {
// Hva skal jeg ha her for å starte main.StartEtProgram()
 }
}

Lenke til kommentar
Videoannonse
Annonse

Flere løsninger:

1. Legg til .exe fila som en referanse i .dll fila (så får du tilgang til Main klassen)

2. Named pipes

3. Windows Message Queue

4. Registrer en delegate som skal kjøres i .dll klassen

public static class Program
{
 public static void Main()
 {
var ctrl_panel = new Kontrollpanel();
ctrl_panel.StartEtProgram = new StartProgramProc(StartEtProgram);
 }
 public static void StartEtProgram(string prog)
 {
// blablabla
 }
}
//Dll
public delegate StartProgramProc(string prog);
public class Kontrollpanel
{
 public StartProgramProc StartEtProgram;
 public void OnKnappSomStarterEtProgram()
 {
StartEtProgram("notepad.exe");
 }
}

Lenke til kommentar
Flere løsninger:

1. Legg til .exe fila som en referanse i .dll fila (så får du tilgang til Main klassen)

Gåd det da? EXE fila henter jo inn denne DLL'en. Blir ikek det komplisert for kompilatoren? Høna og egget du vet...

 

2. Named pipes

Dette trodde jeg var nettverksgreier ;-) Blei litt nysgjerrig....

 

3. Windows Message Queue

Krever ikke dette en Server2003+ da?

 

4. Registrer en delegate som skal kjøres i .dll klassen

public static class Program
{
 public static void Main()
 {
var ctrl_panel = new Kontrollpanel();
ctrl_panel.StartEtProgram = new StartProgramProc(StartEtProgram);
 }
 public static void StartEtProgram(string prog)
 {
// blablabla
 }
}
//Dll
public delegate StartProgramProc(string prog);
public class Kontrollpanel
{
 public StartProgramProc StartEtProgram;
 public void OnKnappSomStarterEtProgram()
 {
StartEtProgram("notepad.exe");
 }
}

HVA!!!! Dette er jo DRITKULT!! Går virkelig dette??? Steike knuse! Dette skal jeg sjekke ut.......

Lenke til kommentar

1. Ja, funker det. Har gjort det selv.

2. Er for interprocess kommunikasjon. Virker som nettverk, men er ikke det.

3. Ja, stemmer det. Windows 2003 eller Vista+

4. ^^

 

edit: ser jeg manglet en void i delegate definisjonen min :)

public delegate void StartProgramProc(string prog);

Endret av GeirGrusom
Lenke til kommentar

Kontrolpanel kan kjenne til interface ICommand/IExecuter. Programmet setter det ved oppstart slik at Kontrolpanel kan kalle Execute på interfacet ved behov.

 

Dette virker nok likt tidligere anbefalt metode, men gir bedre testbarhet samt endringsdyktighet og separerer funksjon og kode på en bedre måte.

Lenke til kommentar
Kontrolpanel kan kjenne til interface ICommand/IExecuter. Programmet setter det ved oppstart slik at Kontrolpanel kan kalle Execute på interfacet ved behov.

 

Dette virker nok likt tidligere anbefalt metode, men gir bedre testbarhet samt endringsdyktighet og separerer funksjon og kode på en bedre måte.

Ja så klart. Interfaces tenkte jeg ikek på i farta. Skal vurdere begge variantene.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...