【发布时间】:2010-06-16 20:54:39
【问题描述】:
我正在从由 C# 应用程序处理的托管 C++ 引发一个事件。 C# 事件处理程序是否在从 C++ 引发的同一线程上执行??
换句话说,是否为 C++ 引发事件阻塞,直到它完全由 C# 处理?
【问题讨论】:
标签: c# c++ event-handling multithreading blocking
我正在从由 C# 应用程序处理的托管 C++ 引发一个事件。 C# 事件处理程序是否在从 C++ 引发的同一线程上执行??
换句话说,是否为 C++ 引发事件阻塞,直到它完全由 C# 处理?
【问题讨论】:
标签: c# c++ event-handling multithreading blocking
在 .NET 中,事件处理程序调用默认是同步的,并且由于您的代码既是托管 C++ 又是 C#,因此都是“.NET”。
如果您希望您的事件处理程序异步运行,您可以简单地在 C# 端附加一个处理程序,它可以启动另一个 Thread 来完成工作,将一个工作程序放入 ThreadPool,或者调用另一个方法来处理通过Delegate 使用asynchronous programming 异步工作。然后处理程序将快速返回,允许 C# 工作在后台执行,而 MC++ 代码可以继续调用事件的其他侦听器。
确保如果您确实执行了实际异步处理事件的代码,C++ 代码不会期望事件参数中的数据被处理程序修改。如果使用 CancelEventArgs 之类的东西,就会出现这种情况。
【讨论】:
是的。绕过长度限制的额外文本:)
而且我必须通过“我是人类”的测试!
【讨论】: