2

.Net Compact Framework 2.0 SP2およびC#を使用して、 Windows Mobile 5.0以降のアプリケーションを開発しています。

メソッド内に次のコードがあります。

if (listBox1.InvokeRequired)
{
    Invoke(new MethodInvoker(
        delegate() { listaBox1 = listaBox2; listBox1.Visible = true; }));
}
else
{
    listBox1 = listBox2;
    listBox1.Visible = true;
}

実行すると、2 番目のステートメント (listBox1.Visible = true;) で次のように例外がスローされます。

別のスレッドで作成されたコントロールと対話するには、Control.Invoke を使用する必要があります。

何が起こっていますか?

4

2 に答える 2

4

2つのリストボックスは異なるスレッドで作成されました。つまり、ほとんどすべての場合、本当に、本当に悪い考えです。

于 2009-11-30T23:47:59.423 に答える
1

ListBoxこのシナリオに2 つの参照がある理由

  1. リストボックス1
  2. リストボックス2

listBox1 の InvokeRequired メンバーのみをチェックしました。しかし実際には、listBox2 が最初に指していたインスタンスで .Visible を呼び出すことになります。結果の動作に基づいて、2 つの参照が最初に の 2 つの異なるインスタンスを指していた可能性がありますListBox

これを修正するには、実際に使用することになる listBox2 の InvokeRequired を確認します。

于 2009-11-30T17:08:36.110 に答える