2011-01-05 18 views
1

Ich habe eine Windows-Anwendung mit C# entwickelt. In dieser Anwendung erstelle ich einen Prozess. Ich möchte einige Schaltflächen aktivieren und deaktivieren, wenn Process_Exited() -Ereignis auftritt. In Process_Exited() -Methode, ich habe Code geschrieben Tasten zu aktivieren, aber zur Laufzeit bekomme ich Fehler wieWie aktiviert man die Formularschaltfläche, nachdem der Prozess beendet wurde?

„Cross-Thread-Betrieb nicht gültig: Steuerung ‚tabPage_buttonStartExtraction‘ von einem anderen Thread zugegriffen als die Thread, an dem es erstellt wurde. "

Mein Code-Schnipsel ist:

void rinxProcess_Exited(object sender, EventArgs e) 
{ 
    tabPage_buttonStartExtraction.Enabled = true; 
    tabPageExtraction_StopExtractionBtn.Enabled = false; 
} 

Kann jemand empfehlen, wie dies möglich zu machen?

Antwort

3

Verschieben Sie die Aktivierungs-/Deaktivierungszeilen in einer separaten Methode, und rufen Sie diese Methode von rinxProcess_Exited mit der Methode Control.Invoke auf.

2

Sie müssen UI-Änderungen am UI-Thread vornehmen. Weitere Informationen finden Sie unter this question.

Hier ist die Lösung für Ihr Beispiel angewendet:

void rinxProcess_Exited(object sender, EventArgs e) 
{ 
    if (this.InvokeRequired) 
    { 
     this.Invoke((Action)(() => ProcessExited())); 
     return; 
    } 

    ProcessExited(); 
} 

private void ProcessExited() 
{ 
    tabPage_buttonStartExtraction.Enabled = true; 
    tabPageExtraction_StopExtractionBtn.Enabled = false; 
} 
+0

funktioniert es auf .net 2.0 framework? Ich denke => Operator wurde in 3.5 Framework hinzugefügt – Shekhar

+0

Sie haben Recht. Sie müssen einen Delegaten anstelle einer anonymen Methode verwenden, wenn Sie das 2.0-Framework verwenden. Ich habe gerade 3,5 oder höher angenommen. –

Verwandte Themen