PDA

View Full Version : سوال: استفاده از مولتی ترد



vaheeed
شنبه 15 مهر 1391, 20:04 عصر
من داخل فرم wpf میخوام با ترد کار کنم در برنامه های ویندوزی یه نخ تعریف میکردم و اگه میخواستم در ظاهر برنامه تغییری ایجاد کنم باید از تابع invoke استفاده میکردم حالا اساتید گفتن باید از dispatcher استفاده کنم طبق چیزایی که خوندم این کد رو نوشتم

System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate()
{
grid1.Dispatcher.Invoke(System.Windows.Threading.D ispatcherPriority.Normal,new Action(delegate()
{
//V0.Stroke = Brushes.Green;
try
{
foreach (Shape c in grid1.Children)
{
if (c is Ellipse && c.Name == "V" + ((i - 1).ToString()))
{
Ellipse ellnew = c as Ellipse;
ellnew.Stroke = Brushes.Green;
ellnew.Fill = Brushes.Yellow;
}
}
}
catch
{ }
 
}
));
}
));

ولی نمیدنم چرا وقتی اینو میزارم هیچ تغییری پیدا نمیکنه !!! اون خطی که الان به عنوان توضیح گذاشتم اگه تنها باشه کار میکنه ولی چرا کلش کار نمیکنه؟؟

vaheeed
شنبه 15 مهر 1391, 20:20 عصر
اشتباه در کد نویسیم بود ترد رو اجرا میکردم ولی جای درستی نمیبستمش ، اخه تو برنامه های ویندوزی اول ترد رو باز میکردم و بعد تابعش رو مینوشتم ولی اینجا برعکس بود همین کد بالا کار میکنه واسه کسایی که خواستن از ترد استفاده کنن

vaheeed
دوشنبه 17 مهر 1391, 12:13 عصر
با همین کد کارم راه افتاد فقط یه مشکل دارم ، کجا باید ترد رو ببندم؟؟ یعنی من کد زیر رو داخل رویداد کلیک یه دکمه نوشتم:



System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate()
{
while (true)
{
grid1.Dispatcher.Invoke(System.Windows.Threading.D ispatcherPriority.Normal, newAction(delegate()
{
if (temp == 0)
{ ell1.Stroke = Brushes.Blue; temp = 1; }
else
{ ell1.Stroke = Brushes.Red; temp = 0; }
}
));
}
}
));
thread.Start();
flagE = 1;

و حالا که رو یه دکمه دیگه کلیک کردم میخوام این ترد بسته بشه ، برای اینکه بفهمم که ترد باز هست یا نه هم از flagE استفاده کردم ولی داخل رویداد کلیک دکمه خروج که اسم ترد رو مینویسم نمیشناسش!!! لطفا راهنمایی کنید