C# WinForm应用程序UI在长时间运行操作期间挂起
我有一个windows窗体应用程序 我需要使用一个for循环,它有大量的远程调用,大约2000-3000个调用C# WinForm应用程序UI在长时间运行操作期间挂起,c#,winforms,multithreading,C#,Winforms,Multithreading,我有一个windows窗体应用程序 我需要使用一个for循环,它有大量的远程调用,大约2000-3000个调用 在执行for循环时,我失去了对表单和表单控件的控制,因为它变成了一个大进程,有时会显示“没有响应”,但如果我等了很长时间,它又回来了,我想我需要使用一些线程模型来实现这一点,有什么想法吗,我如何继续解决这个问题?显然,您需要使用后台线程。我建议您阅读。您需要在后台线程上执行长时间运行的操作 有几种方法可以做到这一点 您可以将方法调用排队以在线程池线程上执行(请参阅): 在.NET 4.
在执行for循环时,我失去了对表单和表单控件的控制,因为它变成了一个大进程,有时会显示“没有响应”,但如果我等了很长时间,它又回来了,我想我需要使用一些线程模型来实现这一点,有什么想法吗,我如何继续解决这个问题?显然,您需要使用后台线程。我建议您阅读。您需要在后台线程上执行长时间运行的操作 有几种方法可以做到这一点
TaskFactory.StartNew()
)使用Task.Run()
:
使用MethodInvoker是最简单的方法。将
Application.DoEvents()
放入循环。@i486-永远不要调用DoEvents()
。在代码中引入难以解决的bug是一种邪恶的方式。
ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod));
Task.Factory.StartNew(() => YourMethod());
Task.Run(() => YourMethod());
private voidForm_Load(object sender, EventArgs e)
{
MethodInvoker mk = delegate
{
//your job
};
mk.BeginInvoke(callbackfunction, null);
}
private void callbackfunction(IAsyncResult res)
{
// it will be called when your job finishes.
}