سؤال

ما زلت نوع جديد ل ج# ، وخاصة خيوط في ج#.أحاول بدء وظيفة تتطلب شقة مترابطة واحدة (ستاثريد)

ولكن أنا لست قادرا على تجميع التعليمات البرمجية التالية:

تبدو الوظيفة كما يلي في فئة منفصلة تسمى MyClass:

internal static string DoX(string n, string p)
        {
            // does some work here that requires STAThread
        }

لقد حاولت السمة [ستاثريد] على رأس وظيفة ولكن هذا لا يعمل.

لذلك أحاول إنشاء مؤشر ترابط جديد على النحو التالي:

 Thread t = new Thread(new ThreadStart(MyClass.DoX));

ولكن هذا لن تجميع (أفضل طريقة مثقلة خطأ الحجج غير صالحة).ومع ذلك ، فإن المثال عبر الإنترنت مشابه جدا (مثال هنا) ما أفعله خطأ وكيف يمكنني ببساطة جعل وظيفة تشغيل في موضوع ستا جديد?

شكرا

هل كانت مفيدة؟

المحلول

Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

إذا كنت بحاجة إلى القيمة ، يمكنك" التقاط " ذلك مرة أخرى إلى متغير ، ولكن لاحظ أن المتغير لن يكون له القيمة حتى نهاية مؤشر الترابط الآخر:

int retVal = 0;
Thread thread = new Thread(() => {
    retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

أو ربما أبسط:

Thread thread = new Thread(() => {
    int retVal = MyClass.DoX("abc", "def");
    // do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top