【发布时间】:2013-08-27 10:18:10
【问题描述】:
我想显示非模态信息窗口并等待其他线程中的智能卡触摸。我需要阻止我的主 UI 线程以防止用户操作,除非智能卡将被读卡器触摸。 我在主线程中这样做:
InformationWindow infoWindow = new InformationWindow();
infoWindow.tblockInfo.Text = someInfoAboutRequieredAction;
infoWindow.Show();
Semaphore.WaitOne();
infoWindow.Close();
它工作正常,在某些情况下可以正常绘制,但我的信息 WPF 窗口通常没有完全绘制。只有标题部分,窗口内没有一个控件(和背景颜色)在悬挂时可见
请帮忙,我一个星期不明白该怎么办
附:我在Semaphore.WaitOne() 之前尝试过InvalidateVisual()、UpdateLayout() 和Thread.Sleep,但没有帮助
【问题讨论】:
-
尽量不要阻塞 UI 线程,一切都应该画得很好。通常对于后台任务,您会使用第二个线程,但新的异步功能应该很容易解决这个问题。
-
我的应用程序与智能卡处理有关。我需要阻止我的主 UI 线程以防止用户操作,除非智能卡将被读卡器触摸(用于在其上写入新数据)
-
ShowDialog() 是专门为它发明的。使用它并为所有后台工作使用 Threads/Tasks/BackgroundWorker 等
-
是的,谢谢,但是在这种情况下,当它完成对智能卡的处理时,如何在其他线程中关闭此窗口?我需要排除任何关闭此窗口和下一个用户在不使用智能卡的情况下工作的可能性......
标签: c# wpf multithreading window non-modal