在自己的线程中执行的线程之间的 C# 事件(如何)?

标签 c# events multithreading delegates

我想要两个线程。我们称他们为:

  • 线程 A
  • 线程 B

线程 A 触发一个事件,线程 B 监听这个事件。 当线程 B 事件监听器被执行时,它是用线程 A 的线程 ID 执行的,所以我猜它是在线程 A 中执行的。

我想做的是能够向线程 B 触发事件,说类似这样的话:“嘿,数据已经为您准备好了,您现在可以处理它了”。这个事件必须在它自己的线程中执行,因为它使用只有他可以访问的东西(比如 UI 控件)。

我该怎么做?

谢谢你的帮助。

最佳答案

您需要将信息编码回 UI 线程。

通常,您会在事件处理程序中处理它。例如,假设线程 A 是您的 UI 线程 - 当它订阅线程 B 中的对象上的事件时,事件处理程序将在线程 B 中运行。但是,它可以将其编码回 UI 线程:

// In Thread A (UI) class...
private void myThreadBObject_EventHandler(object sender, EventArgs e)
{
    this.button1.BeginInvoke( new Action(
        () => 
            {
                // Put your "work" here, and it will happen on the UI thread...
            }));
}

关于在自己的线程中执行的线程之间的 C# 事件(如何)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2403972/

相关文章:

python - 是否有像 Django 信号一样提供 'signals'(事件)功能的通用 Python 库?

c++ - GDI+ 多线程绘图

c# - 使用 C# 的线程池问题

C# 乘法口诀表

c# - 在 Roslyn 与 Microsoft.CodeAnalysis 中添加元数据引用

c# - 如何获取我的项目路径?

java - 等待线程中的特定条件变为真

c# - MySql 命令 : how to get title into comboboxes

javascript - 使用 keydown() 仅发送一个 Ajax post 请求 - jQuery

WPF MouseLeftButtonUp 未触发