PDA

View Full Version : سوال: show form in thread



aysha_6586
یک شنبه 08 خرداد 1390, 18:53 عصر
داخل thread یه فرم میخوام نمایش بدم اما اون فرم کاملا غیرفعال میشه و اشیا روش هم نمایش داده نمیشه از روش های مختلفی استفاده کردم
1-

delegate void MyEventHandler();
private event MyEventHandler SomeEvent;
private void OnSomeEvent()
{
if (SomeEvent != null)
SomeEvent();
}
private void CreateAForm()
{
if (this.InvokeRequired)
{
this.Invoke(new MyEventHandler(this.CreateAForm));
return;
}

fchat = new openchat(recivingPM);
this.privateWindowsList.Add(fchat);
fchat.Show(this);
}
string recivingPM
= "";
داخل thread
SomeEvent += new MyEventHandler(CreateAForm);
OnSomeEvent();

2-
فراخوانی فرم داخل thread به صورت
new Thread(() => new openchat(pm).ShowDialog()).Start();

3-
fchat = new openchat(pm);
this.privateWindowsList.Add(fchat);
fchat.Show(this);
Application.DoEvents();
4-
fchat = new openchat(pm);
this.privateWindowsList.Add(fchat);
Application.Run(fchat);

خیلی سیرچیدم اما نیافتم لطفا کمک!!!!!:لبخند:

aysha_6586
سه شنبه 10 خرداد 1390, 10:20 صبح
کسی تا حالا به این مشکل برنخورده
برنامه تحت شبکه ای چیزی که موقع listen کردن تویی thread و بعد از دریافت پیام بخوایین فرمی باز کنه تا پیام رو نشون کاربر برنامه بده
vs.net 2005 مشکلی نداشت این کد اجرا میشد ولی نمیدونم 2008 چرا نمیشه!!!
لطفا برای انجام کار بالا اگر روش دیگه ایی هم سراغ دارین راهنمایی کنین شدیدا استقبال میکنیم:)

saman6384
سه شنبه 10 خرداد 1390, 11:05 صبح
منم شبیه این مشکلو داشتم تقریبا
اما فرم رو تو thread نزاشته بودم
اول که receive و listen رو همینجوری صدا میزدم! برنامه تا وقتی کار این دوتا تابع تموم نمی شد قفل میکرد!
همچین که این دوتا تابع رو تویه Thread جدا از فرم ریختم درس شد!

aysha_6586
سه شنبه 10 خرداد 1390, 14:19 عصر
ممنون از توجهتون
بله هر دو تابع من داخل thread هستند. داخل thread به اشیا موجود نمیشه دسترسی پیدا کرد مگر با استفاده از روش delegate فرمی که میخواییم نمایش بدیم هم یه شی با این تفاوت که داخل thread ساخته میشه تو روش اولی که تو پست اول نوشته بودم همون delegate رو استفاده کردم ولی باز هم جواب نداده.
احتمالا قانون خاصی داره که من اطلاع ندارم. امیدوارم تو این بحث بتونم یاد بگیرم.

saman6384
سه شنبه 10 خرداد 1390, 15:28 عصر
به نظر من
receive و listen و send و کلا Connection هاتو ببر بزار تویه کلاس
یه کلاس دیگم درس کن که هر وقت Connection چیزی receive کرد یه فرم بسازه هو بقیه داستان!
اینجوری دیگه باهم تداخل هم پیدا نمی کنن!! فرم هم راحت لود میشه!

aysha_6586
چهارشنبه 11 خرداد 1390, 09:26 صبح
تو اون یه کلاس دیگه هم تا یه تابع listen نباشه چطور میخواد متوجه بشه پیغامی اومده یا نه!! اون هم باید داخل یک thread باشه مطمئنا تا همش چک کنه و باز هم مشکل باز کردن فرم در thread

saman6384
چهارشنبه 11 خرداد 1390, 09:48 صبح
همونطور که گفتم منم یه سرور ابتدایی نوشتم
که اولش همین مشکل شما رو داشتم که برنامه freez میشد تا یکی بهش وصل شه
اما thread فرم و کانکشن رو که جدا کردم درس شد

aysha_6586
یک شنبه 15 خرداد 1390, 00:47 صبح
بله حالا متوجه شدم
ممنون حتما امتحان میکنم