【发布时间】:2011-12-19 22:14:27
【问题描述】:
我是线程新手。我在我的 WPF 应用程序中使用后台线程来与数据库通信和消息通信。
其中一个视图模型应打开一个单独的窗口。由于这应该作为 UI 线程运行,所以我正在做:
private void OnSelection(SelectionType obj)
{
Thread thread = new Thread(ShowRegionWindow);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
private void ShowRegionWindow()
{
var rWindow = new RegionWindow();
rWindow .Show();
rWindow .Closed += (s, e) => System.Windows.Threading.Dispatcher.ExitAllFrames();
System.Windows.Threading.Dispatcher.Run();
}
现在我需要在另一条消息上关闭此窗口。我该怎么做?
【问题讨论】:
-
为什么它必须作为 UI 线程运行?如果只是创建一个昂贵的对象,您可以在背景踏板上创建该对象,然后将其绑定到主对象(很容易关闭)。
-
它没有创建对象。它正在创建另一个 WPF 窗口
-
您的问题陈述是“与数据库对话的后台线程”。如果您没有创建一个与数据库对话的对象,那么您对数据库做了什么?
-
我的问题是没有用线程与数据库交谈。我已经通过后台线程这样做了。现在进行一些操作,后台线程需要打开一个新的 WPF 窗口并关闭。我怎么做。对不起,如果我的问题不清楚
-
为什么后台线程确实需要打开窗口?您可以在从后台线程检索结果以打开新窗口的主线程上进行回调。什么操作需要新窗口?您可以重构以获取有关主要的信息并启动另一个背景吗?
标签: c# .net wpf multithreading mvvm-light