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