2011-01-05 9 views
1

私はC#を使って開発されたWindowsアプリケーションを持っています。このアプリケーションでは、1つのプロセスを作成しています。 Process_Exited()イベントが発生したときに、いくつかのボタンを有効または無効にしたいとします。以外のスレッドからアクセス を コントロール 『tabPage_buttonStartExtraction』:Process_Exited()メソッドで は、私はボタンを有効にするには、コードを書かれているが、実行時に、私はプロセス終了後にフォームボタンを有効にするにはどうすればよいですか?

「クロススレッド操作ではありません有効であるとエラーが出ますそれが作成されたスレッド "

私のコードスニペットは、次のとおりです。

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

誰もがこれを可能にする方法を提案することができますか?

答えて

2

はここにあなたの例に適用ソリューションです。 このようなものを試してみてください。

呼び出しが非常に高価なので、別のスレッドからUIで多くの作業を行うべきではありません。

ソース:http://msdn.microsoft.com/en-us/library/ms171728.aspx

3

有効/無効行を別の方法で移動し、そのメソッドをControl.Invokeメソッドを使用してrinxProcess_Exitedから呼び出します。

2

UIスレッドでUIを変更する必要があります。詳細はthis questionを参照してください。あなたが別のスレッドからUIを変更しようとしている

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

.net 2.0フレームワークで動作しますか?私は思う=>演算子は3.5フレームワークに追加されました – Shekhar

+0

あなたはそうです。 2.0フレームワークを使用している場合は、匿名メソッドの代わりにデリゲートを使用する必要があります。私は3.5以上と仮定した。 –

関連する問題