PDA

View Full Version : سوال: مشکل در استفاده از trhead



Mohsen_Fotouhi
جمعه 10 تیر 1390, 16:14 عصر
سلا م
من می خوام با استفاده از thread یک فایل text رو بخونم و در یک TextBox نمایش بدم اما مشکلم اینکه متد کلاسی که به نماینده thread ارسال می کنیم باید void باشه و هیچ مقداری رو بازگشت نمیده چطوری می تونم به همین روش سطر های فایل رو بخونم و همزمان سطر به سطر در یک textBox اضافه کنم

با تشکر

gwbasic
جمعه 10 تیر 1390, 16:52 عصر
نیازی نیست چیزی رو برگردونه کافیه تو همون Thread که دارین از فایل می خونین مقدار Text مربوط به TextBox رو ست کنین البته با استفاده از Invoke چون تو ترد دیگه هستین و نمی تونین Thread UI رو دستکاری کنین مگر با Invoke

Mohsen_Fotouhi
شنبه 11 تیر 1390, 17:41 عصر
سلام

میشه رو یه مثال توضیح بدید

با تشکر

Farshid007
شنبه 11 تیر 1390, 21:48 عصر
یه void به این شکل بنویس:
void ReadAllText()
{
textBox1.Text = System.IO.File.ReadAllText("ادرس");
}
thraet رو هم اینجوری تعریف کن:
Thread t1 = new Thread(new ThreadStart(ReadAllText));
t1.Start();
ولی نیازی نیست که از ترت استفاده کنی!واسه چی از ترت استفاده می کنی؟:متعجب:

Mohsen_Fotouhi
یک شنبه 12 تیر 1390, 14:29 عصر
این فایل text من یه فایل text با حجم خیلی زیاده برای لود کردنش زمان زیادی رو می خواد برای همین از ترد استفاد کردم
ممنون از راهنماییتون

gwbasic
یک شنبه 12 تیر 1390, 14:31 عصر
یه void به این شکل بنویس:
void ReadAllText()
{
textBox1.Text = System.IO.File.ReadAllText("ادرس");
}
thraet رو هم اینجوری تعریف کن:
Thread t1 = new Thread(new ThreadStart(ReadAllText));
t1.Start();
ولی نیازی نیست که از ترت استفاده کنی!واسه چی از ترت استفاده می کنی؟:متعجب:


به این سادگی نیست کدتون رو تست کنید

gwbasic
یک شنبه 12 تیر 1390, 14:41 عصر
چند را ه وجود داره
1- دستورات IO خودش BeginXXX و Endxxx داره که می شه Async عملیات IO انجام داد
http://msdn.microsoft.com/en-us/library/kztecsys(v=vs.71).aspx

2- استفاده از BackgroundWorker که در همین سایت آموزش دادم

3- استفاده از همان سبک new کردن یه Thread جدید



public delegate void MyMethodInvoker(string text);

public void ReadAsyncFile()
{
MyMethodInvoker met = new MyMethodInvoker(ChangeUI);
textBox1.Invoke(met, File.ReadAllText("c:\\file.txt));
}

public void ChangeUI(string text)
{
textBox1.Text=text;
}

Thread t= new Thread(ReadAsyncFile);
t.Start();