C#中事件绑定出现当前上下文不存在

来源:百度知道 编辑:UC知道 时间:2024/09/22 14:38:18
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace chap火灾
{
public delegate void Fireeventhandle (object sender,Fireeventargs e);
public class Firesender
{
private Fireeventargs eventargs;
public event Fireeventhandle Fireeventbreak;
public void Onchangebreak(object sender,Fireeventargs e)
{
if(Fireeventbreak!=null)
{
Fireeventbreak(sender ,e);
}
}
public void small()
{
eventargs.Place = "安庆师范学院";
eventargs.Level = "火小,倒一点水就可以了!";
}
public void big()
{
eventargs.Place = "安庆师范学院";
eventargs.Level = "火大,需要灭火器才行!";
}
public void vbig()
{

你的代码有两个地方要更改
一、就是你说的那个错误:
在fire.Fireeventbreak += new Fireeventhandle(fire_Fireeventbreak);
这里面的"fire_Fireeventbreak"是一个方法,就是事件发生是的处理方法,在你的类中没有发现这个方法,你写成public void Water(Fireeventargs e)
但参数不正确,应该和你定义的委托参数及返回类型保持一高致,修改成
public class Firereceiver
{

public Firereceiver(Firesender fire)
{

fire.Fireeventbreak += new Fireeventhandle(this.Water);
}
public void Water(object sender, Fireeventargs e)
{
Console.WriteLine("Fire event place:{0}\t处理方法:{1}", e.Place, e.Level);
}
}
这样编译不会错,但你的代码并不能正确执行,这就是第二个问题,
因为你方法虽然绑定了,但你的事件并没有真正执行,因为在你调用:small() 或big()等火灾发生时,并没有去调用Onchangebreak方法,去触发事件,也就是你只是去调用了一个普通的方法big()而已,程序并不知道你的big方法应该去触发火灾事件。
修改为
public void big()
{
eventargs.Place = "安庆师范学院";
eventargs.Level = "火大,需要灭火器才行!";
//加上下面一行。
this.Onchangeb