سؤال

لذلك نحن نعمل على التطبيق الجديد لمتجر ويندوز ونحن الاستفادة من دايركت على ج/ / سك جزء من التطبيق و ج# على الآخر.كما كنا بحاجة إلى نوع من الاتصالات ، أنشأنا واجهة في مكتبة مشتركة (ج#) والطبقة التي تنفذ على جانب ج # من المشروع.ثم نمرر مثيل تلك الفئة إلى ج++.عندما ج 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top