在使用Task.Run启动的方法中调用ShowDialog是否安全?

时间:2016-08-11 20:42:25

标签: c# .net wpf multithreading task

我正在调用一个我想在后台线程上运行的方法:

Task.Run(() => CleanupLogs());

CleanupLogs方法删除超过特定天数的日志文件。它在try / catch块中执行删除。如果存在异常,则会通过Window.ShowDialog向用户显示例外情况。这样做安全吗?如果没有,有没有办法让Window.ShowDialog在UI线程上运行?

1 个答案:

答案 0 :(得分:1)

只要您没有获得STA模型异常,您就可以了。但是如果你需要显示一个窗口/对话框,请确保你有一个Dispatcher对象的引用,该对象在每个WPF FrameworkElement上都可用(因为它们从DispatcherObject继承)以及主Application类

Application.Current.Dispatcher.BeginInvoke(
    DispatcherPriority.Background,
    new Action(() => Window.ShowDialog()));

有关详细信息,请参阅WPF Inside Out: Dispatcher