-3

ここに私のコードで....

List<Task> t;

private void Form1_Load(object sender, EventArgs e)
{
    t = new List<Task>();
    t.Add(Task.Factory.StartNew(() => Download()));
    t.Add(Task.Factory.StartNew(() => Display()));
}

これで、displayメソッドでコントロールを非表示にすると、「クロススレッド例外」が発生し、メインスレッドによって使用されていることがわかります。

4

2 に答える 2

0

Displayメソッドが作成されたスレッドとは別のスレッドで実行されていることは明らかです。

マスター スレッドからのみ、WinForm コントロールに変更を加えることができます。コントロールで InvokeRequired が true かどうかを確認し、必要に応じてメソッドを呼び出す必要があります。

制御に関する情報を更新します。

この方法を試すことができます:

if (this.InvokeRequired)
{
    this.Invoke((MethodInvoker)delegate { update the ui control here});
}
于 2013-03-18T17:38:56.433 に答える
0

メインスレッドで操作を呼び出す必要があります。次のようなことをする必要があります:

Invoke((Action)(() => updateProgressBar()));

これにより、メイン UI スレッドで更新が実行されます。

于 2013-03-18T17:39:28.073 に答える