C# 事件处理程序仅在触发两个或多个事件时触发
C# Event Handler only triggered when two or more events have been fired
这个问题以前有人问过,但没有答案。我在同一条船上,想再试试运气。这似乎是非常基本的。
说,我有两个事件,一个事件是"Certain Key pressed",另一个事件是"Data Arrived"。我在其事件处理程序中处理 "Data Arrived" 事件来处理数据,我想在触发 "Certain Key Pressed" 事件时做一些特别的事情。
处理此问题的一种方法是设置某种标志,该标志在 "Certain Key Pressed" 事件处理程序中设置。并且在 "Data Arrived" 事件处理程序中检查了标志。
我想知道是否有更优雅或更标准的方法来处理必须触发两个或更多事件才能发生操作的情况。
谢谢!!!
如果您使用的是 winforms,请务必注意表单事件(如 Click 事件)永远不会相互中断。现在这取决于您的数据处理是否发生在同一个线程(UI 线程)中。例如,如果您在另一个 Click 事件中开始处理数据,并且不启动另一个任务或使用 async-await,那么 DataArrived
事件也会在 UI 线程中发生。在这种情况下,这些事件处理程序将严格按顺序调用。标志方法会很好用。
否则参见:How to raise cross thread event. With multi-threading, you must take care to protect code that tests and changes the flags (e.g. with lock statement (C# reference)).
这个问题以前有人问过,但没有答案。我在同一条船上,想再试试运气。这似乎是非常基本的。
说,我有两个事件,一个事件是"Certain Key pressed",另一个事件是"Data Arrived"。我在其事件处理程序中处理 "Data Arrived" 事件来处理数据,我想在触发 "Certain Key Pressed" 事件时做一些特别的事情。
处理此问题的一种方法是设置某种标志,该标志在 "Certain Key Pressed" 事件处理程序中设置。并且在 "Data Arrived" 事件处理程序中检查了标志。
我想知道是否有更优雅或更标准的方法来处理必须触发两个或更多事件才能发生操作的情况。
谢谢!!!
如果您使用的是 winforms,请务必注意表单事件(如 Click 事件)永远不会相互中断。现在这取决于您的数据处理是否发生在同一个线程(UI 线程)中。例如,如果您在另一个 Click 事件中开始处理数据,并且不启动另一个任务或使用 async-await,那么 DataArrived
事件也会在 UI 线程中发生。在这种情况下,这些事件处理程序将严格按顺序调用。标志方法会很好用。
否则参见:How to raise cross thread event. With multi-threading, you must take care to protect code that tests and changes the flags (e.g. with lock statement (C# reference)).