【发布时间】:2014-11-23 21:27:01
【问题描述】:
我有一个显示对话框的线程。我为此使用线程的原因是因为我希望对话框立即显示(所以我使用ShowDialog()))而主线程继续做一些繁重的工作。当主线程完成“重”功能时,我希望对话框停止显示。
这是我正在使用的代码:
Thread searchingAlertThread = (new Thread(() =>
{
SearchingAlert searchingAlert = new SearchingAlert();
try {
searchingAlert.ShowDialog();
} catch (ThreadAbortException) { // Thrown when the thread is aborted
searchingAlert.Close();
}
}));
searchingAlertThread.SetApartmentState(ApartmentState.STA);
searchingAlertThread.Start(); // Starts the thread
BluetoothDeviceInfo[] devices = client.DiscoverDevices(); // Takes 15 seconds
searchingAlertThread.Abort(); // Stops the thread
searchingAlert 是 WPF 窗口 对话框,显示 TextView 和 ImageView 以及动画 gif。
问题是,有时当这个调用被多次调用时(以防它没有找到任何设备),ImageView 不会显示,更重要的是,ThreadAbortException 不会被抛出。
这是用对话框关闭线程的正确方法吗?
【问题讨论】:
-
使用
Invoke()到Close()对话框。 -
@SLaks 很抱歉造成误解,但它是 WPF ......我已经编辑了问题
-
不要使用 ShowDialog。如果您需要打开一个线程只是为了在另一个窗口上创建一个窗口,这意味着有问题......为什么不打开一个窗口或创建一个显示进度的用户控件呢?
标签: c# wpf multithreading dialog