问完这个问题后,我想知道是否可以等待一个事件被触发,然后获取事件数据并返回其中的一部分。有点像这样:
private event MyEventHandler event;
public string ReadLine(){ return event.waitForValue().Message; }
...
event("My String");
...elsewhere...
var resp = ReadLine();
请确保您提供的任何解决方案都直接返回该值,而不是从其他东西中获取它。我在问上面的方法是否以某种方式可用。我知道 Auto/ManuelResetEvent,但我不知道它们会像我上面那样直接返回值。
更新:MyEventHandler
我使用(包含一个Message
字段)声明了一个事件。我在另一个线程中有一个方法,称为ReadLine
等待事件触发。当事件触发时,WaitForValue 方法(事件处理场景的一部分)返回包含消息的事件参数。然后,该消息由 ReadLine 返回给调用它的任何对象。
我问的那个问题的公认答案是我做了什么,但感觉不太对劲。在 ManuelResetEvent 触发和程序检索数据并返回数据之间,几乎感觉数据可能会发生一些事情。
更新:的主要问题Auto/ManualResetEvent
是它太脆弱了。一个线程可以等待该事件,然后在将其更改为其他内容之前没有给其他任何人足够的时间来获取它。有没有办法使用锁或其他东西?也许使用 get 和 set 语句。