C# WPF应用程序已冻结,并表示没有响应

C# WPF应用程序已冻结,并表示没有响应,c#,wpf,multithreading,wpf-controls,C#,Wpf,Multithreading,Wpf Controls,我有一个WPF应用程序,它将大量的文件从源代码复制到traget。因此,我使用dispatcher来完成这项工作,即使我的应用程序已经冻结,并且在文件复制完成之前在标题栏中说“不响应” ButtonPower.Dispatcher.BeginInvoke( System.Windows.Threading.DispatcherPriority.Send, new NextPrimeDelegate(this.DoAction)); 我想显示进度条,直到复制操作完成,而且窗口不应该冻结。我建

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

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

我想显示进度条,直到复制操作完成,而且窗口不应该冻结。我建议使用Dispatcher解决此问题的任何解决方案或建议,但这并不意味着您的UI不会冻结-事实上,Dispatcher确保所有工作都在同一UI线程上完成,因此您将冻结UI。相反,您应该生成一个新线程并在那里执行工作。然后使用dispatcher通知UI更新,因为这在新线程中是不允许的。这就是调度员的主要职责


有关良好的实现和进一步的想法,请参阅。

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


有关良好的实现和进一步的想法,请参阅。

您可以使用
禁用进程窗口重影
,如下所示

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

您可以使用
禁用进程窗口重影
,如下所示

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

我完全同意你的看法,但我不知道如何实现新线程?你能给我举个例子或参考链接吗?我完全同意你的观点,但我不知道如何实现新的线程?你能给我举个例子或者引用链接吗?这就是P-Invoke声明。你把它叫哪里?在应用程序启动时?这是P-Invoke声明。你把它叫哪里?在启动应用程序时?