WinRT C++/CX到C#多线程封送处理
因此,我们正在为Windows应用商店开发新的应用程序,在应用程序的C++/CX部分使用DirectX,在其他部分使用C#。由于我们需要某种通信,我们在共享库(C#)中创建了接口,并在项目的C#端创建了实现该接口的类。然后我们将该类的实例传递给C++。当C++需要与C语言通信时,它调用共享接口的方法,C执行在类中实现的方法。p> 当C++从另一个线程调用方法,而不是对象传递给它时,问题就出现了。错误:WinRT C++/CX到C#多线程封送处理,c#,multithreading,windows-runtime,marshalling,c++-cx,C#,Multithreading,Windows Runtime,Marshalling,C++ Cx,因此,我们正在为Windows应用商店开发新的应用程序,在应用程序的C++/CX部分使用DirectX,在其他部分使用C#。由于我们需要某种通信,我们在共享库(C#)中创建了接口,并在项目的C#端创建了实现该接口的类。然后我们将该类的实例传递给C++。当C++需要与C语言通信时,它调用共享接口的方法,C执行在类中实现的方法。p> 当C++从另一个线程调用方法,而不是对象传递给它时,问题就出现了。错误: 应用程序调用了为不同线程编组的接口。 下面是它的工作原理: C#
应用程序调用了为不同线程编组的接口。
下面是它的工作原理:
C# instance of shared interface (some class)
C# -> C++ \/ passed in parameter of public C++ method
C++ saves to variable
C++ creates new thread
C++ calls instance->SayHello();
C# exception
共享接口:(C#)
实施:(C#)
赋值方法(C++)
然后,我使用UI线程中的UserMessageService
实例调用AssignUserMessageService
。当我试图访问C++中调用的数据时发生错误,在另一个线程中调用<代码> RealMeMeSe>/Cuth.< /P>
是否有其他方法传递实例或调用方法 问题是我使用的是
CoreApplication.MainWindow.corefown.Dispatcher
而不是Window.Current.Dispatcher
这可能会有所帮助:@Matt这对我来说确实有效。错误是我使用的是CoreApplication.MainWindow.CoreWindow.Dispatcher
,它看起来不是UI线程调度程序。。。
public interface IUserMessageService
{
void WriteMessage(string message, MessageTypes type);
}
public sealed class UserMessageService : IUserMessageService
{ ... }
void AssignUserMessageService(...::IUserMessageService ^service) { m_service = service; }