我有这段代码:
serialPort.PinChanged +=Func5;
Func1();
Func2();
//here event throw
Func3();
Func4();
Console.ReadKey();
当我进入Func5
时?只有当我的线程无法做什么?(在最后一行之后)?
当事件发生时?这是依赖巫婆类型的事件吗?
如何设置我想立即捕获此事件?
答案 0 :(得分:1)
如果事件是异步触发的(即,在显示的代码的流控制之外),则无法知道事件何时将与所显示的代码相关联。它甚至可能不会与显示的代码在同一个线程上运行。
答案 1 :(得分:0)
这取决于应用程序的类型以及事件是否在同一个线程中上升。
假设您有一个WinForms应用程序,上面显示的代码是从Click
- 事件运行的,并且PinChanged
事件是在同一个线程(即UI线程)中触发的。
WinForms永远不会中断您正在运行的代码。如果您有一个长时间运行的Click方法,并且用户在方法终止之前再次单击,则第二次单击事件将被放入等待队列,并且第一次单击方法将继续,直到它终止。这也意味着长时间运行的方法阻止了UI。另一方面,它使事情变得更简单,因为您不必处理代码块中断彼此或同时运行,这可能是非常棘手的。
您的PinChanged
活动也是如此。当您的应用程序空闲时,它只会运行Func5
,即所有其他代码都被终止。
同样,只有当您或所涉及的库函数不使用多线程时才会出现这种情况。除非文档明确说明,否则PinChanged
不太可能在另一个线程中升级。
答案 2 :(得分:0)
只有当串口引脚发生变化时才会调用Func5
,这是函数订阅的事件。这可能发生在调用Func1
之前或者可能永远不会......这完全取决于两个因素:
如果您可以通过编程方式更改串行端口引脚,那么您可以完全控制该事件,并且您基本上可以随时使事件触发...否则该事件将位于您的控件范围之外。