C# 将事件发送到特定线程
在这种情况下,我需要一个线程来处理一些顺序逻辑。该线程有时需要与主线程交互,以便更新用户输入。但是它应该在不影响主线程的情况下继续运行。我希望以事件驱动的方式来实现这一点,这样主线程就不必为另一个线程的中断设置极点。最好的方法是什么?是否有一种事件驱动技术可以像MFC一样在线程之间进行通信 我使用的是Visual Studio 2008和(显然).Net 3.5框架。可能就是您想要的。基本上,您的主线程会等待使用这些类的各种方法,直到您从使用该方法的其他线程发出信号。然后,您的等待线程将恢复并继续等待之后的任何内容。 这与事件样式一样好。您必须等待并倾听,才能收到对事件的反应。如果您优雅地获得了一个事件,您还应该如何停止线程工作?这在任何语言的线程中都是不可能的 你唯一的另一种可能性就是频繁的打断和投票 使用组件C# 将事件发送到特定线程,c#,wpf,multithreading,events,delegates,C#,Wpf,Multithreading,Events,Delegates,在这种情况下,我需要一个线程来处理一些顺序逻辑。该线程有时需要与主线程交互,以便更新用户输入。但是它应该在不影响主线程的情况下继续运行。我希望以事件驱动的方式来实现这一点,这样主线程就不必为另一个线程的中断设置极点。最好的方法是什么?是否有一种事件驱动技术可以像MFC一样在线程之间进行通信 我使用的是Visual Studio 2008和(显然).Net 3.5框架。可能就是您想要的。基本上,您的主线程会等待使用这些类的各种方法,直到您从使用该方法的其他线程发出信号。然后,您的等待线程将恢复并继
您可以找到关于C#中线程的最佳完整教程,以及代码示例和示例。如果您使用BackgroundWorker,则可以引发进度事件。
关于如何更新进度条。请查看.Net反应式扩展IObservable,特别是SubscribeOn和ObserveOn扩展方法
ObserveOn是完成工作的地方(你的后台线程),SubscribeOn是通知的地方(你的UI线程)。啊哈!有一种事件驱动的方法可以做到这一点。我从WPF借了
调度器。我只是让旋转线程访问主线程的CurrentDispatcher
,我让线程旋转,当它需要注意时,它调用Dispatcher
上的一个委托并休眠,等待主线程中断它。我知道我可以使用Invoke
而不是BeginInvoke
,但我需要使用中断,因为重新启动工作线程的方法不是已调度委托堆栈的同步部分
不管是好是坏,以下是我的代码:
private void Run()
{
while (true)
{
...
// Need attention from the main thread
// "_main" is the main thread's Dispatcher instance.
_main.BeginInvoke(new MyEventHandler(OnNeedsAttention), this, new MyEventArgs(...));
try
{
Thread.Sleep(Timeout.Infinite);
}
catch (ThreadInterruptedException) { }
}
}
BackgroundWorker
只支持进度事件,不是吗?我有大量不同的事件,我不希望通过进度值发送它们;或者类似的。那太过分了。我在寻找一个更规范的答案。你让我一直等到主线程等待。那不符合我的要求。我需要两个线程独立运行,直到第二个线程需要交互。我知道如何使用BackgroundWorker
。它不符合我的要求。这是什么程序集/命名空间?反应式扩展框架程序集。谷歌将帮助你找到各种下载等准确的网页。