C# 实现窗体不阻塞的等待
一、Show与ShowDialog
众所周知在c#中有两种显示窗口的方式:模态显示(showdialog)与非模态显示(show),模态显示会阻塞调用窗口的所有消息响应,在调用ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 ,期间用户是无法对该窗口外的界面进行ui交互的;非模态显示则不会,可以在弹出窗口和调用窗口之间随意切换。调用窗口调用show方法后,下面的代码可以立即执行。
二、实现不阻塞的等待
那么如果我们想实现一个新的窗口显示方法,既可以像模态显示那样,在关闭对话框的时候才执行显示方法后的代码,又可以像非模态显示那样不阻塞消息响应,不影响用户的UI操作。这里我们就要用到一个方法Dispatcher.PushFrame 想深入了解的可以参考这篇文章:https://www.h3399.cn/201709/148010.html 这里只讲如何使用 代码如下(窗口显示):
Window.Show();
_dispatcherFrame = new DispatcherFrame();
Dispatcher.PushFrame(_dispatcherFrame);
代码如下(窗口关闭):
_dispatcherFrame.Continue = false;
_dispatcherFrame = null;
这样我们就可以实现非阻塞等待显示