知识大全 WPF中Closing窗体时调用Hide()方法异常
Posted 知
篇首语:学问之根苦,学问之果甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 WPF中Closing窗体时调用Hide()方法异常相关的知识,希望对你有一定的参考价值。
WPF中Closing窗体时调用Hide()方法异常 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
有朋友遇到这样的一个问题 在WPF中 当Closing一个窗体时 将e Cancel=true 然后再调用Hide()方法 以便隐藏窗口而不是关闭 但报异常了 当Window Closing时不能设置Visibility 或调用Show() Close() Hide()方法 OK 本随笔将帮你解决该问题
问题的关键在于不能再Closing方法中调用Close等 那么只要我们知道用户有意图关闭窗体时 仅仅再Closing方法中取消关闭 然后在Closing紧接着的某个方法中调用Hide就OK了 为了体现这个 紧接着的某个方法 让我联想到方法排队 比如多个线程中的方法使用同一个对象时 这些方法将被排队 否则异常 那么就用Invoke来帮我们实现这个排队就OK了
假设我们的Window类型的win 时一个需要隐藏的窗口 企图关闭该窗体时其会被隐藏 点击主窗口上的btnShowWin 按钮时窗体会再次被显示 我们实现一个Delegate 其代理的方法将异常窗体 delegate void WillHide(); // private WillHide willHide; // this willHide = new WillHide(this HideWin ); // private void HideWin () this win Hide(); 当Closing时我们这样 void win _Closing(object sender CancelEventArgs e) e Cancel = true; Dispatcher BeginInvoke(System Windows Threading DispatcherPriority Normal this willHide); Everything is OK!
整体的代码 Code using System; using System Collections Generic; using System Linq; using System Text; using System Windows; using System Windows Controls; using System Windows Data; using System Windows Documents; using System Windows Input; using System Windows Media; using System Windows Media Imaging; using System Windows Navigation; using System Windows Shapes; using System ComponentModel;
namespace ClosingDemo /**//// <summary> /// Interaction logic for Window xaml /// </summary> public partial class Window : Window delegate void WillHide();
private Window win = new Window (); private WillHide willHide;
public Window () InitializeComponent();
Test();
private void HideWin () this win Hide();
private void Test() App Current MainWindow = this; App Current ShutdownMode = ShutdownMode OnMainWindowClose;
this willHide = new WillHide(this HideWin );
this win Closing += new CancelEventHandler(win _Closing);
this btnShowWin Click += new RoutedEventHandler(btnShowWin _Click);
this win Show();
void btnShowWin _Click(object sender RoutedEventArgs e) this win Show();
void win _Closing(object sender CancelEventArgs e) e Cancel = true; Dispatcher BeginInvoke(System Windows Threading DispatcherPriority Normal this willHide);
cha138/Article/program/ASP/201311/21706相关参考
用WPF实现屏幕文字提示的实现方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文介绍WPF应用
在MFC中使用WPF技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一介绍 本文将以一个实
以下程序将教你如何制作一个窗体窗体一旦运行将在屏幕上不断抖动cha138/Article/program/Delphi/201311/8406
在Web窗体设计器中未能加载该文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用visual
用C#.net轻松制作不规则窗体 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以前作不规则窗体
用Javascript实现父窗体的更新 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Respo
用VB.NET设计各种形状的窗体界面一 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 窗体是程序
用VB.NET轻松制作特效窗体 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!体是Windows应用
巧妙用Delphi设计多边形窗体 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文将介绍如何利用W
用VB.NET设计各种形状的窗体界面二 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 结合上