PDA

View Full Version : متوقف شدن برنامه هنگام فراخوانی فرم جدید !!



mousa1992
پنج شنبه 12 مرداد 1391, 00:50 صبح
سلام دوستان
ممنونم از توجهتون
توی برنامه یک backgroundworker دارم که شرایطی رو بررسی میکنه و در صورت برقرار شدن فرمی رو باید باز کنه که توی اون فرم نیز یک background دیگه شروع به کار میکنه و به محض اینکه به خط باز کردن فرم جدید میرسه این ارور رو میده !! مشکل از چی میتونه باشه ؟ ممنون



Exception has been thrown by the target of an invocation.

mohamad.zakery
پنج شنبه 12 مرداد 1391, 04:47 صبح
دسترسی به منابع ترد دیگه شامل قوانینی هستش!!!

شما به اطلاعات اشتراکی ترد(thread) دیگه دسترسی نداری مگر با دلگیت(delegate)!!!
این ها رو چک کن مشکلت حل میشه!!!

the king
پنج شنبه 12 مرداد 1391, 13:39 عصر
سلام دوستان
ممنونم از توجهتون
توی برنامه یک backgroundworker دارم که شرایطی رو بررسی میکنه و در صورت برقرار شدن فرمی رو باید باز کنه که توی اون فرم نیز یک background دیگه شروع به کار میکنه و به محض اینکه به خط باز کردن فرم جدید میرسه این ارور رو میده !! مشکل از چی میتونه باشه ؟ ممنون


دسترسی به منابع ترد دیگه شامل قوانینی هستش!!!

شما به اطلاعات اشتراکی ترد(thread) دیگه دسترسی نداری مگر با دلگیت(delegate)!!!
این ها رو چک کن مشکلت حل میشه!!!

شما برای اون BackgroundWorker اول تون مشخصه WorkerReportsProgress رو True کنید و بجای اینکه داخل DoWork اش مستقیما فرم جدید رو باز کنید
یک مقدار درصد پیشرفت خاص مثل 123 رو ارسال کنید :

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
.
.
.
backgroundWorker1.ReportProgress(123);
.
.
.
}


و باز کردن اون فرم رو در رخداد ProgressChanged اش انجام بدید، فرق اش اینه که در ProgressChanged این Thread اصلی یه که فرم رو باز می کنه :

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage == 123)
{
using (Form2 f2 = new Form2())
{
f2.Show();
}
}
}

mousa1992
دوشنبه 16 مرداد 1391, 22:17 عصر
شما به اطلاعات اشتراکی ترد(thread) دیگه دسترسی نداری مگر با دلگیت(delegate)!!!
این ها رو چک کن مشکلت حل میشه!!!




شما برای اون BackgroundWorker اول تون مشخصه WorkerReportsProgress رو True کنید و بجای اینکه داخل DoWork اش مستقیما فرم جدید رو باز کنید
یک مقدار درصد پیشرفت خاص مثل 123 رو ارسال کنید :


تشکر از پاسخ
همه ی این قوانین رعایت شده
پیامی از کلاینت به سرور فرستاده میشه و برنامه سمت سرور بررسی میکنه اگر فرم مربوط به پیام ها بسته بود اونو باز میکنه و به محظ باز شدن فرم پیام ها background فعالیت خودشو (که همون دریافت پیام ارسالی و نمایش اون هست ) اغاز میکنه . به خط باز کردن فرم پیام که میرسه این ارور رو میده !!! این ارور ینی چی ؟ متشرکم


Exception has been thrown by the target of an invocation.

the king
دوشنبه 16 مرداد 1391, 23:52 عصر
تشکر از پاسخ
همه ی این قوانین رعایت شده
پیامی از کلاینت به سرور فرستاده میشه و برنامه سمت سرور بررسی میکنه اگر فرم مربوط به پیام ها بسته بود اونو باز میکنه و به محظ باز شدن فرم پیام ها background فعالیت خودشو (که همون دریافت پیام ارسالی و نمایش اون هست ) اغاز میکنه . به خط باز کردن فرم پیام که میرسه این ارور رو میده !!! این ارور ینی چی ؟ متشرکم

یک خلاصه ای از کدی که نوشتید لازمه تا بشه تشخیص داد مشکل از خود نمایش فرم ئه یا روالی که موقع نمایش فرم انجام میشه، حس می زنم
که وقتی هنوز Thread ئه در حال اجرا است فرمی بسته میشه.
Thread ئه تو عالم خودش درخواستی به Thread فرم ارسال می کنه که الان امکان اش نیست.
یک نگاهی به این نمونه بندازید، فرم حواسش هست که قبل از بسته شدنش حتما BackgroundWorker
از حالت اجرا خارج شده باشه :
90888

mousa1992
چهارشنبه 18 مرداد 1391, 00:09 صبح
بازم تشکر از توجهتون
بررسی کردم کد ها رو و مشکل در خواندن پیام ارسال شده از سرور هست! ( که این دستورات در thread ی قرار میگیره که توی فرم پیام هاست و با باز شدن فرم پیام اجرا میشه ) اونو داخل try - catch قرار دادم و برنامه متقف نشد و بی نتیجه ! حتی در catch ارور رو هم که میخواستم بگیرم برنامه متوقف شد !!

mousa1992
چهارشنبه 18 مرداد 1391, 00:40 صبح
دوستان کارم گیر همینه
اگه ممکنه راهنمایی کنید متشکرم