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)
当它发生时,它的处理程序必须在第二个线程中运行.但是每次都在同一个线程中,所以第二个线程必须是永久性的,并且在第一次执行后不会被终止.
请帮我实现这个.
创建共享队列:
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)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |