在一个永久线程中运行事件处理程序

Ser*_*gey 2 .net c# events multithreading

我找了解决方案,但一无所获.

在某些课程中,我有活动

public class ClassWithEvent
{
    public event Action<string> SomeEvent;

    ...
}
Run Code Online (Sandbox Code Playgroud)

这个事件有订阅者

public class SubscriberClass
{
    public void SomeMethod(string value)
    {
        ...
    }
}

ClassWithEvent objectWithEvent = new ClassWithEvent();

SubscriberClass subscriberObject = new SubscriberClass();

objectWithEvent.SomeEvent += subscriberObject.SomeMethod;
Run Code Online (Sandbox Code Playgroud)

在主线程的某处可以调用此事件.

if(SomeEvent != null)
    SomeEvent(someString);
Run Code Online (Sandbox Code Playgroud)

当它发生时,它的处理程序必须在第二个线程中运行.但是每次都在同一个线程中,所以第二个线程必须是永久性的,并且在第一次执行后不会被终止.

请帮我实现这个.

Zer*_*er0 6

创建共享队列:

private BlockingCollection<string> queue = new BlockingCollection<string>();
Run Code Online (Sandbox Code Playgroud)

创建专用线程:

Thread thread = new Thread(HandleEvents);
thread.Start();
Run Code Online (Sandbox Code Playgroud)

处理该线程上的事件:

private void HandleEvents()
{
    foreach (string someValue in queue.GetConsumingEnumerable()) 
    { 
        //Do stuff 
    }
}
Run Code Online (Sandbox Code Playgroud)

引发事件时将项目放入队列:

objectWithEvent.SomeEvent += (x) => queue.Add(x);
Run Code Online (Sandbox Code Playgroud)

关机时完成队列:

queue.CompleteAdding();
Run Code Online (Sandbox Code Playgroud)