1

ShowPanel(Control ctrl)パラメータとして渡す必要がある関数がありControlます。バックグラウンド ワーカー スレッドでこの関数を呼び出す必要があります。次のコードを使用します

void bw_DoWork(object sender,DoWorkEventArgs e)
{                      
    ShowPanel(listBox1);           
}

しかし、execptionで失敗します

クロススレッド操作が無効です: コントロール 'Form1' は、それが作成されたスレッド以外のスレッドからアクセスされました

listBox1バックグラウンドスレッドでここを渡すにはどうすればよいですか?

4

2 に答える 2

1

Invoke の代わりに BeginInvoke があるべきだと思います。

それ以外の場合は、より一般的な解決策があります。

WindowsBase.dll への参照を追加する必要があります。

メイン スレッドで、スレッドのディスパッチャを取得します。

public class SomeClass
{
    System.Windows.Threading.Dispatcher mainThreadDispatcher;       

    // assuming class is instantiated in a main thread, otherwise get a dispatcher to the
    // main thread
    public SomeClass()
    {
        Dispatcher mainThreadDispatcher = Dispatcher.CurrentDispatcher;
    }

    public void MethodCalledFromBackgroundThread()
    {
        mainThreadDispatcher.BeginInvoke((Action)({() => ShowPanel(listBox1);}));
    }
}
于 2013-10-03T07:50:06.513 に答える