PDA

View Full Version : سوال: هنگ کردن ریسمان یا thread



birtemp
چهارشنبه 09 فروردین 1391, 02:05 صبح
سلام
من تو برنامه ام از تعدادی دستور درون یک کلاس استفاده می کنم. و این کلاس رو برای اجرا شدن به یک ریسمان یا thread می فرستم. و برنامه هم اجرا می شه.
مشکل اینجاست که برنامه با کمی هنگ کردن (فرم برنامه هنگ می کند) جواب رو نشون میده (انگار از thread استفاده نکردی).
می خواستم بدونم thread هم ممکنه هنگ کنه ؟

کلاس :

public void th_translate()
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate{target.Text = "hello world";});
}



private void translate_Click(object sender, RoutedEventArgs e)
{
try
{
Thread t = new Thread(new ThreadStart(th_translate));
t.Start();
}
catch (Exception)
{
}
}


من برنامه رو با زبان سی شارپ wpf نوشتم. یکم فک کنم کدهاش فرق کنه.
لطفاً یک کمکی بکنید. ممنون

mohammad272005
چهارشنبه 09 فروردین 1391, 02:14 صبح
شما از Thread استفاده کردی. ولی thread رو بلافاصله وصل کردی به threadی که UI رو لود میکنه!!!
شما باید قسمت محاسباتی رو توی thread انجام بدی. بعد وقتی خواستی نتیجه رو نمایش بدی، thread مربوط به UI رو invoke کنی.

birtemp
چهارشنبه 09 فروردین 1391, 12:13 عصر
آقا محمد میشه این کار رو با مثال بفرمائید.
من چیزی متوجه نشدم، آخه تازه با این زبان دارم کار می کنم.
الان کجای کد رو باید تغییر بدم؟
ممنون

mohammad272005
چهارشنبه 09 فروردین 1391, 14:49 عصر
public void th_translate()
{
//Simulating translation process...
// Sending <toTranslate> to translation engine...
Thread.Sleep(5000);
var result = "hello world"; // taranslated text is sent babk.
this.Dispatcher.Invoke(DispatcherPriority.Normal,
(Action)delegate
{
this.translate.Content = "_Translate";
this.translationResult.Content = result;
this.translate.IsEnabled = true;
this.target.IsEnabled = true;
});
}
private void translate_Click(object sender, RoutedEventArgs e)
{
this.toTranslate = this.target.Text;
this.translationResult.Content = "Translating...";
this.translate.IsEnabled = false;
this.target.IsEnabled = false;
var t = new Thread(this.th_translate);
t.Start();
}
من با اجازه یه وفقه 5 ثانیه ای هم به برنامه اضافه کردم تا زمانی اتلاف بشه برای شبیه سازیِ ترجمه. یک مقدار هم به برنامه رنگ و لعاب دادم.
اگه سوالی بود باز هم در خدمت هستم

البه ناگفته نمونه که من در کل Task رو به Thread ترجیح میدم

birtemp
چهارشنبه 09 فروردین 1391, 17:05 عصر
دستتون درد نکنه.
خیلی خیلی ممنون. من بازم اون مشکل رو دارم (فک کنم مشکل از برنامه باشه :اشتباه:). ولی به شما زحمت نمیدم.
همین که جواب سوال رو دادین ، خیلی لطف کردین.
ممنون :چشمک: