1 回答
TA贡献1811条经验 获得超4个赞
从文档
事件是一种特殊的多播委托,只能从声明它们的类或结构(发布者类)中调用。如果其他类或结构订阅了该事件,则在发布者类引发事件时将调用它们的事件处理程序方法
因此,Client.cs您有一个名为TickSize. 此委托使其他类能够订阅与其关联的事件。所以在你的函数中void tickSize(int tickerId, int field, int size),你想让所有其他订阅者知道一个滴答事件发生了。
为此,您首先要查看是否有任何订阅者。这是null检查发生的地方if (tmp != null)。已经tmp没有必要,你可以做if(TickSize != null)。如果您有任何注册的事件处理,它会火和订户将收到的呼叫。在您的情况下,您确实有订阅者,因为您public AppDialog使用以下代码订阅事件:client.TickSize += client_TickSize;
所以无论何时void tickSize(...)被调用 in Client.cs,代码void client_TickSize(...)都会运行。这将调用HandleMessagewhich 将检查它是否需要由Invoke函数调用,因为调用代码不在 UI 线程上。如果确实需要使用Invoke调用它,它将使用当前控件的Invoke函数调用相同的消息(不确定哪个控件,可能是Form)。然后HandleMessage将看到Invoke不需要,因为调用者在 UI 线程上,然后它将调用UpdateUi将更新控件。
- 1 回答
- 0 关注
- 225 浏览
添加回答
举报
