0

次を使用してメソッドでフォーカス状態がチェックされるフォームがあります。

if (!this.Focused)
{ 
   //do something
}

ただし、これは別のワーカー スレッドからもチェックする必要があり、(!this.Focused)別のスレッドから if を呼び出すと、クロス スレッド違反が発生します。this.Focused別のスレッドからブール値の真または偽の状態にアクセスするにはどうすればよいですか? 私はデリゲートを使用して他のスレッドからフォーム コントロールを更新することに慣れていますが、これには実際の問題があります。私は何が欠けていますか?どんな助けでも大歓迎です。

4

3 に答える 3

2

まったく同じですInvoke。デリゲートの戻り値である の戻り値を使用するだけです。

Func<bool> func = () => this.Focused;
var focused = (bool) Invoke(func);
于 2012-09-21T19:47:18.570 に答える
1

これはどうですか?

bool focused = false;

this.Invoke((MethodInvoker)delegate
{
    focused = controlname.Focused; 
});
于 2012-09-21T19:46:19.430 に答える
0

試す、

if (this.InvokeRequired)
{
    this.Invoke((MethodInvoker)delegate
    {
       focused = controlname.Focused; 
   });
}
else
{
focused = controlname.Focused;
}

InvokeRequiredの詳細を確認してくださいhttp://www.codeproject.com/Articles/37642/Avoiding-InvokeRequired

于 2012-09-22T09:05:48.930 に答える