如何在线程等待之前完全绘制非模态WPF窗口

时间:2013-08-27 10:18:11

标签: c# wpf multithreading window non-modal

我想显示非模态信息窗口并等待其他线程中的智能卡触摸。我需要阻止我的主UI线程以防止用户操作,除非用读卡器触摸智能卡。 我在主线程中这样做:

InformationWindow infoWindow = new InformationWindow();
infoWindow.tblockInfo.Text = someInfoAboutRequieredAction;
infoWindow.Show();

Semaphore.WaitOne();

infoWindow.Close();

它工作正常并且在某些情况下正常绘制,但我的信息WPF窗口通常没有完全绘制。只有标题部分,窗口内没有一个控件(和背景颜色)可见,因为它挂起

请帮助,我一周不知道该怎么做

P.S。我在InvalidateVisual()之前已经尝试UpdateLayout()Thread.SleepSemaphore.WaitOne(),但它没有帮助

1 个答案:

答案 0 :(得分:0)

阻止主UI线程与阻止UI非常不同。您最好禁用UI(例如MainWindow.IsEnabled = false)并离开UI线程来绘制窗口。

这也允许您向InformationWindow添加取消按钮,以便在有人启动此过程并且没有可用的智能卡时使用。