我完全新的事件在C#中,這就是我想做的事:如何在c#中使用事件?
我有兩種方法:
OpenPage1();
OpenPage2();
當這些方法之一是所謂的,我想命名爲第三個方法PerformSomeTask()
被調用。
我相信這可以通過事件處理完成。誰能告訴我如何做到這一點?
我完全新的事件在C#中,這就是我想做的事:如何在c#中使用事件?
我有兩種方法:
OpenPage1();
OpenPage2();
當這些方法之一是所謂的,我想命名爲第三個方法PerformSomeTask()
被調用。
我相信這可以通過事件處理完成。誰能告訴我如何做到這一點?
事件是C#的重要組成部分。
簡單來說,您首先需要一個委託人,它描述了調用方法的類型。在你的例子中,PerformSomeTask是無效的並且不帶任何參數。 所以,在你的類聲明
public delegate void PerformSomeTask();
然後,你需要聲明事件,這是將調用啓動您的功能
public event PerformSomeTask OnPerformSomeTask;
在您的這兩種方法,OpenPage1和OpenPage2成員,你需要檢查是否有人訂閱你的活動,如果是,請致電。
if(OnPerformSomeTask != null)
OnPerformSomeTask();
這將啓動每一個訂閱您事件的方法。訂戶可以是多個。
要訂閱,只需像這樣做:
YourClass.OnPerformSomeTask += MyVoidMethod;
[...]
public void MyVoidMethod() { DoSomething(); [...] }
你的無效方法將被稱爲每次您的運行OpenPage1和OpenPage2
如果你需要一些參數,中庸之道改變你的委託進行。然後,你的方法將這個參數作爲標準函數參數(用你的值調用你的事件,把它作爲參數傳遞給每個訂閱函數)。
你所要做的只是添加一個正確的eventHandler事件(在你的例子中爲Action)。 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);
}
爲什麼不能簡單地把成'PerformSomeTask()的調用'兩'OpenPage'methods?這就是說,[這是一個很好的答案](http://stackoverflow.com/questions/6201257/making-method-in-another-class-call-an-event-in-calling-class-when-its-done)在事件訂閱/通知 – 2015-03-25 09:38:18