我经常多次寻找我可能做错的事情。基本上在我的C#应用程序中,我有一个接受来自SignalR的消息的类,然后使用任何侦听器的消息触发事件。我有很多自定义活动正常工作,我已经比较了这段代码,看起来一切都很好。
在消息传递类中,我有这个:
private string _message = string.Empty;
public event EventHandler evtNewMessage;
public string szMessage
{
get { return this._message; }
set
{
this._message = value;
if (this.evtNewMessage != null)
this.evtNewMessage(this, new EventArgs());
}
}
如果(this.evtNewMessage)!= null)我已经在线上休息了,我可以看到该消息使它在那里,但是" this.evtNewMessage"总是为空,所以" this.evtNewMessage(this,new EventArgs());"永远不会跑。
我还验证了通话应用...
public partial class TestFunc : Form
{
...
sigClient oClient = new sigClient();
public TestFunc()
{
oClient.evtNewMessage += EventHandler(DataReceived);
oClient.Startup();
Listen();
}
private void Listen()
{
oClient.RunTests();
}
private void DataReceived(object sender, EventArgs e)
{
//var receivedMessage = System.Text.Encoding.UTF8.GetString(e.Data);
sigClient TempObj = (sigClient)sender;
tbOutPut.Text += TempObj.szMessage;
}
我在线路上设置了一个休息点" oClient.evtNewMessage + = new EventHandler(DataReceived);"我可以看到事件在之前为空并在行运行后分配。
DataReceived函数永远不会被命中,因为事件永远不会被触发;它认为没有订阅。我可以在任何时候中断执行,我可以看到在应用程序中分配了事件。但是,当我进入子类时,它将事件显示为null / unassigned。
任何人都知道可能会发生什么?
编辑:我设置了另一个测试,我初始化comm类,订阅,并在线程初始化之前发送测试消息并且它可以工作。出于某种原因,线程正在覆盖处理程序,但它不是静态类,所以我不确定为什么会发生这种情况?