C# c语言中windows窗体的多任务处理#
在我的代码中C# c语言中windows窗体的多任务处理#,c#,multithreading,winforms,asynchronous,C#,Multithreading,Winforms,Asynchronous,在我的代码中 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())); } List t; 私有void Form1\u加载
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()));
}
List t;
私有void Form1\u加载(对象发送方、事件参数e)
{
t=新列表();
t、 添加(Task.Factory.StartNew(()=>Download());
t、 添加(Task.Factory.StartNew(()=>Display());
}
现在在display方法中,当我隐藏任何控件时,它会给我一个“跨线程异常”,并告诉我它被主线程使用。很明显,
display
方法在创建它的另一个线程上运行
您只能从主线程更改WinForm控件。您需要检查该控件上的InvokeRequired是否为true,然后根据需要调用该方法
更新有关控件的任何信息
您可以这样尝试:
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate { update the ui control here});
}
您必须在主线程上调用您的操作。您需要执行以下操作:
Invoke((Action)(() => updateProgressBar()));
这将在主UI线程上运行更新。显示方法的代码?关于“跨线程异常”已经有数百个问题了。在页面右上角的搜索框中键入或使用google。