PDA

View Full Version : پیغام خطای STA Thread در WPF



smt1383
پنج شنبه 05 خرداد 1390, 12:49 عصر
با سلام
در یک برنامه من در یک Thread دیگر یک نمونه از یک window می سازم و متد ShowDialog آنرا اجرا می کنم اما پیغام خطای زیر ظاهر می شود:

The calling thread must be STA. Because many UI components require this

در حالیکه من همین کار را در win app انجام می دهم و هیچ مشکلی بوجود نمی آید. چه چیزی باعث می شود که در WPF این پیغام ظاهر شود و چگونه می توان این مشکل را حل کرد؟ ممنون

مهدی فرزاد
پنج شنبه 05 خرداد 1390, 12:56 عصر
سلام
شما باید به این شکل بکار ببرید

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

t.Start();

smt1383
پنج شنبه 05 خرداد 1390, 14:39 عصر
ممنون از راهنماییتان. اما من از Thread استفاده نکرده ام. بلکه یک متد را به صورت آسنکرون فراخوانی کرده ام که داخل آن متد یک رویداد Rise می شود و داخل آن رویداد پنجرا جدید ساخته می شود.

smt1383
پنج شنبه 05 خرداد 1390, 18:35 عصر
من به این صورت عمل کردم و جواب داد. نمی دانم راه حل منطقی بوده یا خیر؟


if (this.dispatcher.Thread==syatem.Threading.Thread.C urrentThread)
{
DisplayWindow();
}
else
{
this.dispatcher.invoke(new DisplayWindowdelegate(DisplayWindow),null);
}

private void DisplayWindow()
{
window1 win1=new Window1();
win1.ShowDialog();
}

private delegate void DisplayWindowdelegate();
اگر اشتباه نفهمیده باشم، این قطعه کد، باعث می شود ایجاد و نمایش کلاس win1 در همان Thread اصلی انجام گیرد و نه در یک Thread دیگر. در ضمن من هنوز نفهمیدم که چرا همین کار در win App هیچ مشکلی را بوجود نمی آورد.