事件订阅但在子类中为null(在线程初始化之后)

时间:2015-06-09 02:56:19

标签: c# events

我经常多次寻找我可能做错的事情。基本上在我的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类,订阅,并在线程初始化之前发送测试消息并且它可以工作。出于某种原因,线程正在覆盖处理程序,但它不是静态类,所以我不确定为什么会发生这种情况?

0 个答案:

没有答案