2012-07-11 85 views
1

可能重复:
C# WinForm Application - UI Hangs during Long-Running OperationWindows窗体应用程序 - 慢速/不响应的UI

我使用C#和.NET Framework 4.0中创建一个Windows窗体应用程序。我遇到了一个问题,在程序正在工作的时候,我无法在窗口四处移动,如果我最小化了它,我无法让它回来。我认为这是因为我在UI上运行的同一线程上工作。

这可能是原因吗?如果是的话,我该如何解决它?

+1

这取决于工作是什么。但你可以尝试使用[Background Worker Class](http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx) – 2012-07-11 04:13:49

+0

@MarkHall它主要是上传文件到服务器 – 2012-07-11 04:20:51

+0

我觉得这个问题每天都会被问到......我们可以开始正确地将这些问题作为重复项目来处理吗 – roken 2012-07-11 13:01:50

回答

3

如果你不想要进入线程的内部和线程,我会建议使用BackgroundWorker控件来完成您的任务。后台工作人员控制在后台封装了大量线程工具,为您提供干净的编程接口。

以下链接可以帮助你(我写的)

Correct way to use the BackgroundWorker

0

尝试在编写代码:

  System.Threading.Tasks.Task.Factory.StartNew(new Action(() => 
      { 
       //your code goes here 
      })); 

因为没有任务,你的代码和用户界面上同一个线程中运行时,它会导致缓慢起伏

+0

我应该使用任务还是BackgroundWorker类? – 2012-07-11 04:24:04

+1

@StickFigs看到这个MSDN论坛[链接](http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/75bb20d8-a3a0-4500-b03f-c81ce6bd4f31)基本上,如果你需要更新UI使用Background Worker否则使用System.Threading命名空间 – 2012-07-11 04:29:46

+0

我在WPF中遇到了同样的问题,并使用任务解决它。我从来没有使用BackroundWorker,所以我不能就此提出建议。但我使用Dispathcer.Invoke()更新UI元素。但我不知道这是否合适 – 2012-07-11 04:34:14