PDA

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



programmable
چهارشنبه 19 فروردین 1388, 23:18 عصر
:متعجب:
من تو یکی از فرم هام در ترد فرعی دیتا ستم رو لود کردم و بعدا به فرم بایند کردم! مشکل این نیست ! مشکل اینجاست که وقتی تو خود ویژوال استودیو F5 میکنم برنامه اجرا میشه و به درستی کار میکنه! ولی وقتی تو پوشه bin>Debug فایل exe رو اجرا میکنم ! وقتی فرم لود می کنم اولا که کل دیتا رو تو ترد اصلی لود میکنه بعدش هم نرم افزار قفل میکنه! این جوریشو ندیده بودم دیگه!

Mehdi Asgari
چهارشنبه 19 فروردین 1388, 23:51 عصر
قبلا بحث شده ، سرچ کن ( از یه thread دیگه نباید مستقیما یک کنترل رو تغییر بدی؛ در حالت debug خطاهه هست ، ولی به صورت exception خودشو نشون نمیده)

programmable
پنج شنبه 20 فروردین 1388, 00:35 صبح
قبلا بحث شده ، سرچ کن ( از یه thread دیگه نباید مستقیما یک کنترل رو تغییر بدی؛ در حالت debug خطاهه هست ، ولی به صورت exception خودشو نشون نمیده)

من نمیدونم چرا همه این جمله سرچ کن رو بدون توجه به معنا و مفهوم سوال ، کورکورانه مطرح میکنند . بله بنده با سواد کمم می دونم که نباید یک کنترل رو تو ترد فرعی تغییر داد! تعجبم هم اینه که واقعا مشکلم عجیبه! تو جستجو مشکل مشابه پیدا نکردم. اینجه بحث تغییر کنترل هم مطرح نیست چون بایند کردن در ترد اصلی انجام میشه. :عصبانی++:
2 تا نکته همیشه یادتون باشه دوست عزیز:
1. اینکه exception وقتی هندل نشده باشه چه تو دیباگ چه غیر اون باعث مرگ برنامه میشه ! بنده اصلا exception دریافت نمی کنم ! چون اصول ترد رو رعایت کردم!
2.به نکته بالا توجه کنید .
در هر حال از فرصتی که گذاشتید ممنونم

Mehdi Asgari
پنج شنبه 20 فروردین 1388, 00:55 صبح
اینکه exception وقتی هندل نشده باشه چه تو دیباگ چه غیر اون باعث مرگ برنامه میشه !
http://barnamenevis.org/forum/showpost.php?p=670216&postcount=3
این هم دو تاپیک دیگه»
http://www.barnamenevis.org/forum/showthread.php?t=146178
http://barnamenevis.org/forum/showthread.php?t=36146

programmable
پنج شنبه 20 فروردین 1388, 12:10 عصر
دوست عزیز فکر کنم اینجا Misread اتفاق افتاده . از لینک هایی که دادین ممنونم ولی هیچ کدوم جوابگوی کار من نبود . کد زیر رو اگر داخل ترد فرعی بنویسیم اشکال داره؟



tableadapter.fill(DataSet);

کاری که من تو ترد فرعی می کنم این هست! البته دیتا ست Typed هستش

programmable
پنج شنبه 20 فروردین 1388, 12:13 عصر
البته نکته عجیب برای من اینجا این هست که چرا تو دیباگ خط به خط هیچ ایرادی وجود ندارد ! هیچ Exceptioni! ولی فایل اجرایی داخل پوشه . اولا ترد رو نا دیده میگیره ! ثانیا بعد از چند ثانیه قفل میکنه!:اشتباه:

Mehdi Asgari
پنج شنبه 20 فروردین 1388, 15:15 عصر
:متفکر:
موردی که من میگم برعکسه (یعنی موقع دیباگ یه InvalidOperationException اتفاق می افته با پیام:

Cross-thread operation not valid: Control 'dataGridView1' accessed from a thread other than the thread it was created on.
اما موقع اجرای فایل exe ، اتفاقی (ظاهرا) نمی افته.
قسمتی از کدت رو که میتونی ، بذار اینجا ببینیم.
کد من همچین کاری می کنه :



private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(target));
t.Start();
}

private void target()
{
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Table1", connStr);
DataSet ds = new DataSet();
adapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}

programmable
پنج شنبه 20 فروردین 1388, 15:41 عصر
من میدونستم منظورتون همینه . ولی مشکل من این نیست . من هیچ عمل بایندی انجام نمیدم تو Background فقط همون کدی هست که براتون گذاشتم .توی لود فرمم یه Background اجرا میشه که عمل Fill در اون انجام میشه و بعدا که کاربر یه عملی انجام داد در فرم و در ترد اصلی بایند DataSource انجام میشه !

مشکل عجیب هم همینه که تو محیط ویژوال استودیو این تغییرات لحاظ هست . ولی وقتی فایل Exe رو اجرا میکنم تو همون فرد اصلی عملیات Fill و بایند انجام میشه!! :اشتباه: و بعد از 2 ثانیه قفل میکنه ! از کجا بفهم ایراد چیه!

Mehdi Asgari
پنج شنبه 20 فروردین 1388, 18:50 عصر
نمی دونم
یه نسخۀ خیلی کوچیک از پروژه ات (که حاوی اطلاعات و کدهای مهمت نباشه) و صرفا بتونه این مشکل رو ایجاد کنه رو بذار اینجا