在询问 这个问题之后,我想知道是否有可能等待触发事件,然后获取事件数据并返回部分数据。就像这样:
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 语句。