应用程序必须暂停它当前正在做的事情,转为处理另一个任务,任务完成之后,程序可以从当初暂停的地方恢复执行。这正是事件和委托的用途。
委托是指向一个方法的指针,而且我们采取和调用方法一样的方式来调用它。调用一个委托时,”运行时“实际执行的是委托所引用的方法。可以动态的更改一个委托所引用的方法,事调用一个委托的代码每次都运行一个不同的方法。委托的优势是能引用多个方法。
每个方法都具有相同的形式;它们都不获取参数,也不返回一个值。它们的常规形式: void methodName();
1.
前提先声明一个委托 :delegate void mydelegate();
2.声明事件

event delegatetypename eventname           //delegatetypename委托类型名称      eventname事件名称

3.委托实例化(1)

class Controller
{
  public   delegate void MyDelegate (); 
  private MyDelegate  stopmachinery//创建一个委托的实例
 
   public Controller()
    {
      thisstopmachinery +=folder.stopfloding;//只是将方法加到委托中;此时并没有实际的调用方法
    }  
}

3.委托实例化(2)

MyDelegate myIN = new MyDelegate(MethodName);//实例化委托
 
pubic void MethodName()
{
}

WPF实现关闭子窗口B时触发A窗口事件
声明和使用委托

1、定义子窗口B

发布器功能:

  //第一步,定义委托,委拖不属于任何一个类
  public delegate void ChangeTextHandler();
  public partial class B : Window   //事件发布类
{
    //第二步,声明事件
    public event ChangeTextHandler ChangeTextEvent;
    public B()
     {
        InitializeComponent();
     }
      //点击子窗口B上的一个按钮触发事件
     private void btnCalibraEnter_Click(object sender, RoutedEventArgs e)
      {
          this.Close();//关闭窗口B
          //第四步,调用事件
          ChangeTextEvent();
      }
}

2、定义窗口A,通过窗口A打开子窗口B,打开子窗口B后立即关闭窗口A
订阅器的功能:

public partial class A : Window
{
    public A()
    {
            InitializeComponent();
    }     
    //点击窗口A上的按钮,关闭窗口A,并注册事件
     private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            this.Close();//关闭当前窗口
            //例化窗口B
            B demaWin = new B();
            demaWin.ChangeTextEvent += new ChangeTextHandler(method);//第三步,注册事件
            demaWin.Show();//打开窗口B 
        }
 
        //第五步,事件发生时要调用的方法
        private void method() 
        {
           //虽然当前窗口A已经关闭,但是事件触发时,程序依然可以执行到这里
        }   
}


原文参考:https://blog.csdn.net/kenjianqi1647/article/details/84134731

相关文章: