WPF应用程序冻结并说无响应

时间:2013-03-09 12:12:26

标签: c# wpf multithreading wpf-controls

我有一个WPF应用程序,它将大量文件从源代码复制到traget。因此我使用调度程序来完成这项工作,尽管我的应用程序已经冻结并在标题栏中说“无响应”,直到文件复制完成。

ButtonPower.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Send,
new NextPrimeDelegate(this.DoAction));  

我想显示进度条,直到复制操作完成,窗口也不应该冻结。我会提出任何解决方案或建议来解决这个问题

2 个答案:

答案 0 :(得分:4)

使用Dispatcher并不意味着您的UI不会冻结 - 事实上,调度程序确保所有工作都在同一个UI线程上完成,因此您冻结UI。相反,你应该产生一个新线程并在那里执行工作。然后使用调度程序通知UI更新,因为新线程中不允许这样做。这就是调度员的主要目的!

有关良好的实施和进一步的想法,请参阅this answer

答案 1 :(得分:0)

您可以使用 DisableProcessWindowsGhosting 如下

[DllImport("user32.dll")]
public static extern void DisableProcessWindowsGhosting();