-3

Here in my code....

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()));
}

Now in display method when I hide any control it gives me a "cross thread exception" and tell that it is used by main thread.

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 回答