C# 如何在c中使用事件?
我对c语言中的事件一无所知,这就是我想做的: 我有两种方法:C# 如何在c中使用事件?,c#,events,event-handling,event-listener,C#,Events,Event Handling,Event Listener,我对c语言中的事件一无所知,这就是我想做的: 我有两种方法: OpenPage1(); OpenPage2(); 当调用这两个方法中的任何一个时,我希望调用名为performsMetask的第三个方法 我相信这可以通过事件处理来实现。有人能告诉我怎么做吗?事件是C语言的重要组成部分 简单来说,首先需要一个描述被调用方法类型的委托。在您的示例中,PerformMetask为void,不接受任何参数。 所以在你们班上申报吧 public delegate void PerformSomeT
OpenPage1();
OpenPage2();
当调用这两个方法中的任何一个时,我希望调用名为performsMetask的第三个方法
我相信这可以通过事件处理来实现。有人能告诉我怎么做吗?事件是C语言的重要组成部分 简单来说,首先需要一个描述被调用方法类型的委托。在您的示例中,PerformMetask为void,不接受任何参数。 所以在你们班上申报吧
public delegate void PerformSomeTask();
然后,您需要声明事件,该事件是将被调用以启动函数的成员
public event PerformSomeTask OnPerformSomeTask;
在OpenPage1和OpenPage2这两种方法中,您需要检查是否有人订阅了您的活动,如果是,请致电
if(OnPerformSomeTask != null)
OnPerformSomeTask();
这将启动订阅事件的每个方法。订阅者可以是多个
要订阅,只需按以下方式进行:
YourClass.OnPerformSomeTask += MyVoidMethod;
[...]
public void MyVoidMethod() { DoSomething(); [...] }
每次运行OpenPage1和OpenPage2时都会调用void方法
如果您需要一些参数,只需更改您的委托即可继续
public delegate void PerformSomeTask(string myParam);
然后,您的方法将此参数作为标准函数参数调用您的事件,并将其作为参数传递给每个订户函数。事件是C语言的重要组成部分 简单来说,首先需要一个描述被调用方法类型的委托。在您的示例中,PerformMetask为void,不接受任何参数。 所以在你们班上申报吧
public delegate void PerformSomeTask();
然后,您需要声明事件,该事件是将被调用以启动函数的成员
public event PerformSomeTask OnPerformSomeTask;
在OpenPage1和OpenPage2这两种方法中,您需要检查是否有人订阅了您的活动,如果是,请致电
if(OnPerformSomeTask != null)
OnPerformSomeTask();
这将启动订阅事件的每个方法。订阅者可以是多个
要订阅,只需按以下方式进行:
YourClass.OnPerformSomeTask += MyVoidMethod;
[...]
public void MyVoidMethod() { DoSomething(); [...] }
每次运行OpenPage1和OpenPage2时都会调用void方法
如果您需要一些参数,只需更改您的委托即可继续
public delegate void PerformSomeTask(string myParam);
然后,您的方法将此参数作为标准函数参数调用您的事件,并使用您的值将其作为参数传递给每个订户函数。您在类中所要做的就是在示例中添加具有正确eventHandler操作的事件。eventHandler应该对应于将订阅此事件的方法。 然后从openPage方法触发事件。 如果没有人订阅此事件,则必须检查null
public class Foo
{
public event Action theEvent;
public void OpenPage1()
{
if (theEvent != null)
theEvent();
}
public void OpenPage2()
{
if (theEvent != null)
theEvent();
}
}
public class Bar
{
public int Counter { get; set; }
public void PerformSomeTask()
{
Counter++;
}
}
这里有一个测试,您可以运行它来查看所有内容:
[TestMethod]
public void TestMethod1()
{
var foo = new Foo();
var bar = new Bar();
foo.theEvent += bar.PerformSomeTask;
foo.OpenPage1();
foo.OpenPage2();
Assert.AreEqual(2, bar.Counter);
}
在类中所要做的就是在示例中添加一个具有正确eventHandler操作的事件。eventHandler应该对应于将订阅此事件的方法。 然后从openPage方法触发事件。 如果没有人订阅此事件,则必须检查null
public class Foo
{
public event Action theEvent;
public void OpenPage1()
{
if (theEvent != null)
theEvent();
}
public void OpenPage2()
{
if (theEvent != null)
theEvent();
}
}
public class Bar
{
public int Counter { get; set; }
public void PerformSomeTask()
{
Counter++;
}
}
这里有一个测试,您可以运行它来查看所有内容:
[TestMethod]
public void TestMethod1()
{
var foo = new Foo();
var bar = new Bar();
foo.theEvent += bar.PerformSomeTask;
foo.OpenPage1();
foo.OpenPage2();
Assert.AreEqual(2, bar.Counter);
}
为什么不在两种OpenPagemethods中简单地调用PerformSometTask呢?也就是说,在事件订阅/通知中,为什么不简单地在两种OpenPagemethods中调用PerformSometTask?也就是说,关于活动订阅/通知,感谢您快速准确的回复。帮助我按时完成任务:谢谢你快速准确的回复。帮助我按时完成任务: