【问题标题】:Thread raising event gets blocked by handlers?线程引发事件被处理程序阻止?
【发布时间】:2010-06-16 20:54:39
【问题描述】:

我正在从由 C# 应用程序处理的托管 C++ 引发一个事件。 C# 事件处理程序是否在从 C++ 引发的同一线程上执行??

换句话说,是否为 C++ 引发事件阻塞,直到它完全由 C# 处理?

【问题讨论】:

    标签: c# c++ event-handling multithreading blocking


    【解决方案1】:

    在 .NET 中,事件处理程序调用默认是同步的,并且由于您的代码既是托管 C++ 又是 C#,因此都是“.NET”。

    如果您希望您的事件处理程序异步运行,您可以简单地在 C# 端附加一个处理程序,它可以启动另一个 Thread 来完成工作,将一个工作程序放入 ThreadPool,或者调用另一个方法来处理通过Delegate 使用asynchronous programming 异步工作。然后处理程序将快速返回,允许 C# 工作在后台执行,而 MC++ 代码可以继续调用事件的其他侦听器。

    确保如果您确实执行了实际异步处理事件的代码,C++ 代码不会期望事件参数中的数据被处理程序修改。如果使用 CancelEventArgs 之类的东西,就会出现这种情况。

    【讨论】:

      【解决方案2】:

      是的。绕过长度限制的额外文本:)

      而且我必须通过“我是人类”的测试!

      【讨论】:

      • 这适用于我在 C# 中提出和处理两者的情况??
      • 在纯托管的 DLL 中是的,它都是一样的——不管语言如何。我不确定如果它是非托管事件会是什么样子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多