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(...)
都会运行。这将调用HandleMessage
which 将检查它是否需要由Invoke
函数调用,因为调用代码不在 UI 线程上。如果确实需要使用Invoke
调用它,它将使用当前控件的Invoke
函数调用相同的消息(不确定哪个控件,可能是Form
)。然后HandleMessage
将看到Invoke
不需要,因为调用者在 UI 线程上,然后它将调用UpdateUi
将更新控件。
- 1 回答
- 0 关注
- 177 浏览
添加回答
举报