我已查找解决方案,但什么也没找到。在一个永久线程中运行事件处理程序
在某些类我有事件
public class ClassWithEvent
{
public event Action<string> SomeEvent;
...
}
与此事件在主线程有用户
public class SubscriberClass
{
public void SomeMethod(string value)
{
...
}
}
ClassWithEvent objectWithEvent = new ClassWithEvent();
SubscriberClass subscriberObject = new SubscriberClass();
objectWithEvent.SomeEvent += subscriberObject.SomeMethod;
某处这个事件可以被调用。
if(SomeEvent != null)
SomeEvent(someString);
而当它发生它的处理程序必须在第二个线程中运行。但是每次都在同一个线程中,所以第二个线程必须是永久的,并且在第一次执行后不会被终止。
请帮我实施这个。
取而代之的是'while'循环的更简单的方法是'{的foreach(在queue.GetConsumingEnumerable()字符串someValue中)//完成东西}'。它的行为与你的版本相同,除了Take()在多用户环境中有竞争条件的机会,它可以在已经完成的集合上调用它。 'Take()'抛出一个异常,'GetConsumingEnumerable()'只是退出'foreach'循环。 – 2014-09-05 21:50:03
@ScottChamberlain同意。 – Zer0 2014-09-05 21:55:00