【发布时间】:2013-06-16 20:35:26
【问题描述】:
实际上,我无法在后台线程中运行长时间运行的进程。长时间运行的进程直接从 UI 获取输入,然后必须将任何修改保存在数据库中。因此,这个长时间运行的进程无法访问后台线程中的输入,尽管它被写入了 Dispatch 代码(如下所示):
this.Dispatcher.Invoke((Action)(() =>
{
...//The long running process inside background thread.
}));
我的基本方法是防止用户在长时间运行的进程运行时点击其他任何地方。那么,有没有其他方法可以做到这一点?
【问题讨论】:
-
如果不使用调度器会怎样... ui 线程会被锁定仪式?
-
如何将所有数据从 UI 获取到某个数据存储类 - 调用时数据的快照并针对该数据编写逻辑。您将不再需要 UI,您可以在线程中执行。您的逻辑将返回适当的结果,然后在主线程中您只需显示它。同时,您的 UI 将响应显示一些进度条。它比无响应的应用程序更好。
-
@RameezAhmedSayad 如果我不使用调度程序并在主 UI 线程中编写长时间运行的进程,屏幕将变得无响应......
-
@Rafal 感谢您的建议...我会尝试的。
-
如果你想显示一些进度,那么 Rafal 的回答很好......否则你可以在后台线程运行时将按钮的 enable 属性设置为 false 以禁用控件并稍后启用它.
标签: c# wpf user-interface disabled-input screen-lock