[wpf] يجب أن يكون مؤشر ترابط الاستدعاء STA ، لأن العديد من مكونات واجهة المستخدم تتطلب ذلك


Answers

إذا قمت بإجراء المكالمة من مؤشر الترابط الرئيسي ، يجب إضافة السمة STAThread إلى الأسلوب الرئيسي ، كما هو مذكور في الإجابة السابقة.

إذا كنت تستخدم مؤشر ترابط منفصل ، يجب أن يكون في STA (شقة مترابطة المفرد) ، وهي ليست الحالة لمؤشرات ترابط عامل الخلفية. يجب عليك إنشاء مؤشر الترابط بنفسك ، مثل هذا:

Thread t = new Thread(ThreadProc);
t.SetApartmentState(ApartmentState.STA);

t.Start();

مع ThreadProc كونه مفوض من نوع ThreadStart.

Question

أنا أستخدم http://www.codeproject.com/KB/IP/Facebook_API.aspx

أحاول استدعاء XAML الذي تم إنشاؤه باستخدام WPF . لكنه يعطيني خطأ:

يجب أن يكون مؤشر ترابط الاستدعاء STA ، لأن العديد من مكونات واجهة المستخدم تتطلب ذلك.

أنا لا أعرف ما يجب القيام به. أحاول القيام بذلك:

FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();

لكنه يعطيني هذا الخطأ.

أضفت عامل الخلفية:

static BackgroundWorker bw = new BackgroundWorker();

static void Main(string[] args)
{
    bw.DoWork += bw_DoWork;
    bw.RunWorkerAsync("Message to worker");
    Console.ReadLine();
}

static void bw_DoWork(object sender, DoWorkEventArgs e)
{
    // This is called on the worker thread
    FacebookApplication.FacebookFriendsList ffl = new FacebookFriendsList();

    Console.WriteLine(e.Argument);        // Writes "Message to worker"

    // Perform time-consuming task...
}



يمكنك أيضًا تجربة هذا

// create a thread  
Thread newWindowThread = new Thread(new ThreadStart(() =>  
{  
    // create and show the window
    FaxImageLoad obj = new FaxImageLoad(destination);  
    obj.Show();  

    // start the Dispatcher processing  
    System.Windows.Threading.Dispatcher.Run();  
}));  

// set the apartment state  
newWindowThread.SetApartmentState(ApartmentState.STA);  

// make the thread a background thread  
newWindowThread.IsBackground = true;  

// start the thread  
newWindowThread.Start();  



بالنسبة لي ، حدث هذا الخطأ بسبب تمرير معلمة فارغة. التحقق من قيم المتغير حل مشكلتي دون الحاجة إلى تغيير الشفرة. اعتدت BackgroundWorker.