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