WinRT C++/CX到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#

因此,我们正在为Windows应用商店开发新的应用程序,在应用程序的C++/CX部分使用DirectX,在其他部分使用C#。由于我们需要某种通信,我们在共享库(C#)中创建了接口,并在项目的C#端创建了实现该接口的类。然后我们将该类的实例传递给C++。当C++需要与C语言通信时,它调用共享接口的方法,C执行在类中实现的方法。p> 当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; }