[英]c# event handling
我有一個提供自定義事件的類:
public delegate void ResultEvent(bool result);
public class Service : INotifyPropertyChanged
{
public event ResultEvent Result;
}
其他兩個對象對此的引用如下:
public partial class SomeRandomClass
{
private Service service;
public SomeRandomClass()
{
this.InitializeComponent();
service = new Service();
service.Result += new ResultEvent(service_Result);
}
}
問題是,如果分派了事件,則只有最后一個創建“服務”新對象的對象才能識別。 如果我對先前生成的對象執行“服務”操作,以便必須分派事件,則該事件將在“服務”對象中引發,但不會調用處理程序。
有人知道我可能是什么問題嗎?
聽起來您在某個地方有一個靜態引用,每次創建新實例時,該靜態引用都可能會被覆蓋,但是到目前為止您提供的代碼中沒有類似的內容。 您確實希望每個Service
實例都有其自己的獨立處理程序集,對嗎?
您能發布一個簡短但完整的程序來演示問題嗎? 基本上刪除所有“真實”代碼,直到獲得事件處理和觸發為止。 (您可以使事件觸發類似計時器的事件。)
ResultEvent
委托不是靜態的SomeRandomClass
每個實例將具有其自己的Service
實例,並且它是向該Service
實例的事件注冊的自己的委托,而不是其他SomeRandomClass
的服務實例。
我真的不明白你的要求。 這有幫助嗎?
這不是很多信息,但是這對我來說就是這樣。 Service
是SomeRandomClass
內的一個實例變量,因此,如果您丟失對SomeRandomClass
引用,則它將被垃圾回收,並且該事件永遠不會觸發。
但是,如果您發布了完整的示例,將會很有幫助。
為了演示我在說什么,請考慮以下示例。
SomeRandomClass x;
for(int i =0; i< 10; i++)
{
x = new SomeRandomClass(); //this will subscribe to only the last isntance
}
缺少一個不完整的代碼,盡管實現了INotifyPropertyChanged
但在'PropertyChanged'事件上引發的事件又在哪里呢?
您還缺少引發Result
事件的方法...我已經修改了代碼以適合您的目的...恕我直言,您在連接事件處理程序時應使用標准的Event參數,因為這是常規模式在整個框架中使用...
service.Result += new ResultEvent(service_Result); private void service_Result(object sender, EventArgs e){ .... }
為了完成起見,我已經修改了下面的代碼以完成它...
public class Service : INotifyPropertyChanged { public delegate void ResultEvent(bool result); public event ResultEvent Result; // Where's the raise property changed event handler? private void OnServiceResult(bool result){ if (this.Result != null) this.Result(result); } }
希望這對您有所幫助,湯姆,謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.