PDA

View Full Version : دسترسی به اشیا thread اصلی برنامه



mousa1992
سه شنبه 30 خرداد 1391, 09:43 صبح
سلام دوستان عزیز
توی برنامه ام از یک thread استفاده کردم که به اشیا thread اصلی برنامه میخوام دسترسی داشته باشه
چطوری میتونم این کارو انجام بدم ؟؟
متشکرم

mousa1992
سه شنبه 30 خرداد 1391, 11:37 صبح
CheckForIllegalCrossThreadCalls = false;

از این کد استفاده کردم و دیگه اون ارور مربوط به اشیا نمیداد ولی خب بازم کارمو راه ننداخت
من تابعی نوشتم و اونو داخل یک تایمر قرار میدم به درستی اجرا میشه ولی میخوام همونو با thread ها اجرا کنم

Thread clientThread = new Thread(new ThreadStart(نام تابع));
clientThread.Start();

به نظرتون مشکل از چیه ؟؟
ممنون

Saeed_m_Farid
سه شنبه 30 خرداد 1391, 11:54 صبح
مشکل احتمالاً از عدم جستجو کردن شما می تونه باشه، پاسخ دو سال پیش: اینجا (http://barnamenevis.org/showthread.php?248381#post1105689)
راه حل طبیعی تو همون لینک بالا هست، مطالعه کنید و نتیجه رو بگین (تو لینک داخلی تر! هم یه بحث مفصل داشتیم ...)

البته الان یا تکنولوژی ها متفاوت شده یا من یکم سوادم بیشتر شده! میشه مثلاً از توابع بی نام (لامبادا) هم استفاده کرد: Invoke((MethodInvoker)(()=>lblName.Text="Meep"));

یا مستقیم از Dispatcher استفاده کرده و ازش Invoke کرد:
private void NewJobEventHandler(JobInfo newJob)
{
TreeViewItem tvItem = new TreeViewItem();
string header = "Job: " + newJob.ToString();

OutputDataTree.Dispatcher.BeginInvoke(DispatcherPr iority.Normal,
(Action)(() => {
TreeViewItem tvItem = new TreeViewItem();
tvItem.Header = header;
OutputDataTree.Items.Add(tvItem);
}));
}


اینم ترکیبی از دو تای بالا :
Thread t = new Thread(
o =>
{
Thread.Sleep(2000);
myTextBox.Dispatcher.BeginInvoke(
(Action)(() => { string value = myTextBox.Text; }));
Thread.Sleep(2000);
});
t.Start();