وينرت ج/ / سك إلى ج # مولتيثريد التنظيم
-
21-12-2019 - |
سؤال
لذلك نحن نعمل على التطبيق الجديد لمتجر ويندوز ونحن الاستفادة من دايركت على ج/ / سك جزء من التطبيق و ج# على الآخر.كما كنا بحاجة إلى نوع من الاتصالات ، أنشأنا واجهة في مكتبة مشتركة (ج#) والطبقة التي تنفذ على جانب ج # من المشروع.ثم نمرر مثيل تلك الفئة إلى ج++.عندما ج need تحتاج إلى التواصل مع ج# ، فإنه يدعو أساليب من واجهة مشتركة و ج # ينفذ ما تم تنفيذه في الصف.
المشكلة تنشأ عندما ج calls يدعو أساليب من موضوع آخر من ثم تم تمرير الكائن إلى ذلك.خطأ:
The application called an interface that was marshalled for a different thread.
وإليك كيف يعمل:
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
واجهة مشتركة:(ج#)
public interface IUserMessageService
{
void WriteMessage(string message, MessageTypes type);
}
التنفيذ:(ج#)
public sealed class UserMessageService : IUserMessageService
{ ... }
تعيين طريقة (ج C)
void AssignUserMessageService(...::IUserMessageService ^service) { m_service = service; }
ثم اتصل AssignUserMessageService
مع مثيل UserMessageService
من مؤشر ترابط واجهة المستخدم.يحدث خطأ عندما أحاول الوصول إلى البيانات التي تم تمريرها بواسطة ج when عند الاتصال WriteMessage
في موضوع آخر.
هل هناك أي طريقة أخرى لتمرير المثال أو طريقة الاتصال?
المحلول
كانت المشكلة أنني كنت أستخدم CoreApplication.MainWindow.CoreWindow.Dispatcher
بدلا من Window.Current.Dispatcher