线程提升事件被处理程序阻止?

时间:2010-06-16 20:54:40

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

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

换句话说,在C#完全处理之前,是否会为C ++引发事件阻塞?

2 个答案:

答案 0 :(得分:2)

默认情况下,事件处理程序调用在.NET中是同步的,因为您的代码都是托管C ++和C#,所以它都是“.NET”。

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

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

答案 1 :(得分:0)

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

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