知识大全 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实现屏幕文字提示的实现方法

用WPF实现屏幕文字提示的实现方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文介绍WPF应用

知识大全 在MFC中使用WPF技术

在MFC中使用WPF技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一介绍  本文将以一个实

知识大全 用delphi制作抖动窗体

  以下程序将教你如何制作一个窗体窗体一旦运行将在屏幕上不断抖动cha138/Article/program/Delphi/201311/8406

知识大全 在Web窗体设计器中未能加载该文件

在Web窗体设计器中未能加载该文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用visual

知识大全 用C#.net轻松制作不规则窗体

用C#.net轻松制作不规则窗体  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以前作不规则窗体

知识大全 用Javascript实现父窗体的更新

用Javascript实现父窗体的更新  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Respo

知识大全 用VB.NET设计各种形状的窗体界面一

用VB.NET设计各种形状的窗体界面一  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  窗体是程序

知识大全 用VB.NET轻松制作特效窗体

用VB.NET轻松制作特效窗体  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!体是Windows应用

知识大全 巧妙用Delphi设计多边形窗体

巧妙用Delphi设计多边形窗体  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文将介绍如何利用W

知识大全 用VB.NET设计各种形状的窗体界面二

用VB.NET设计各种形状的窗体界面二  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    结合上