我正在申请一个进度条和一个按钮。如何在C sharp windows应用程序中处理交叉线程错误?
当按钮点击进度条价值将得到提高,这是源代码,
private void Run()
{
progressBar1.Maximum = 1000;
progressBar1.Minimum = 0;
progressBar1.Step = 1;
for (int l_nIndex = 0; l_nIndex < 1000; l_nIndex++)
{
progressBar1.Value++;
Thread.Sleep(10);
}
}
private void button1_Click(object sender, EventArgs e)
{
Run();
}
因此,当我运行应用程序,进度条价值是越来越增加了,但是当我尝试移动窗户没有响应。
我不能以正常的线程方式运行它 - 它会抛出跨线程错误。
,所以我改变了这样的代码,
private void Run()
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(this.Run));
}
else
{
progressBar1.Maximum = 1000;
progressBar1.Minimum = 0;
progressBar1.Step = 1;
for (int l_nIndex = 0; l_nIndex < 1000; l_nIndex++)
{
progressBar1.Value++;
Thread.Sleep(10);
}
}
}
private void button1_Click(object sender, EventArgs e)
{
Thread myThread = new Thread(new ThreadStart(Run));
myThread.Start();
}
现在我可以能够移动winodow,但是当我移动停止进度条,当我松开鼠标按钮的断点续传。所以仍然在UI线程中执行。 如何更好地处理它。请帮助我做到这一点。
见我的答案在这里: 【答案为 “跨线程操作失败”] [1] [1]:http://stackoverflow.com/questions/1489374/cross-thread-operation-not-valid-does-not-kill-winforms-application-and-it-sh/1489452#1489452 – Spence
这里的一切都是错误的,我不能d关于它的任何事情。一切。为什么不只是使用Timer控件? –