PDA

View Full Version : سوال: لود شدن فرم قبل از اجرای دستورات



mtsoft
سه شنبه 25 مهر 1391, 08:50 صبح
با سلام خدمت همه اساتید محترم

من یک فرم دارم که تو رویداد فرم لودش یه سری کد نوشتم که اجرای اونها یکم زمان می بره و این باعث میشه که وقتی کاربر دکمه نمایش اون فرم رو میزنه فرم کمی با تاخیر نمایش داده میشه .ایا راهی وجود داره که اول فرم به صورت کامل نمایش داده بشه و بعد دستورات فرم لود اجرا بشه ؟

ممنون میشم اگه من رو راهنمایی کنید.

morteza271
سه شنبه 25 مهر 1391, 08:58 صبح
سلام.
می تونید از تردها استفاده کنید.که خیلی راحت کارتون رو راه می اندازه!
موفق باشید

hakim22
سه شنبه 25 مهر 1391, 12:21 عصر
میتوانید در رویداد OnShown فرم کد رو قرار بدید
و درون حلقه ( در داخلی ترین حلقه ) از دستور Application.DoEvents استفاده کنید.

استفاده از تردها هم یک راه حل دیگست. راه آسونتر هم BackGroundWorker که کامپوننتی برای کار با همون تردهاست.
در کل تردها پیچیدگی خاص خودشون رو دارند چون AppDomain آنها رو کنترل میکنه و نه خود App که کدشون رو پیچیده تر میکنه

مهرداد صفا
چهارشنبه 26 مهر 1391, 10:34 صبح
با سلام خدمت همه اساتید محترم

من یک فرم دارم که تو رویداد فرم لودش یه سری کد نوشتم که اجرای اونها یکم زمان می بره و این باعث میشه که وقتی کاربر دکمه نمایش اون فرم رو میزنه فرم کمی با تاخیر نمایش داده میشه .ایا راهی وجود داره که اول فرم به صورت کامل نمایش داده بشه و بعد دستورات فرم لود اجرا بشه ؟

ممنون میشم اگه من رو راهنمایی کنید.
سلام
با استفاده از Form.Show ابتدا فرم را نمایش دهید و سپس کدهای دیگر را که در هنگام load شدن اجرا میکنید قرار دهید. به این صورت:

private void Form1_Load(object sender, EventArgs e)
{
this.Show();
//do other things now. ...
}

morteza271
چهارشنبه 26 مهر 1391, 10:43 صبح
سلام
با استفاده از Form.Show ابتدا فرم را نمایش دهید و سپس کدهای دیگر را که در هنگام load شدن اجرا میکنید قرار دهید. به این صورت:

private void Form1_Load(object sender, EventArgs e)
{
this.Show();
//do other things now. ...
}


مهندس میشه این قسمت از کدتون رو توضیح بدین :
this.Show();
به نظرتون اصلا نیازهست!!!

این کد رو در رویداد لود فرمتون بذارین متوجه می شین که فرقی نمیکنه بازهم تا دستورات اجرا نشن فرم نمایش داده نمیشه!!!!
private void Form1_Load(object sender, EventArgs e)
{
this.Show();
for (int i = 0; i < 1000000000; i++) ;
MessageBox.Show("1");
}

مهرداد صفا
چهارشنبه 26 مهر 1391, 12:13 عصر
مهندس میشه این قسمت از کدتون رو توضیح بدین :
this.Show();
به نظرتون اصلا نیازهست!!!

این کد رو در رویداد لود فرمتون بذارین متوجه می شین که فرقی نمیکنه بازهم تا دستورات اجرا نشن فرم نمایش داده نمیشه!!!!
private void Form1_Load(object sender, EventArgs e)
{
this.Show();
for (int i = 0; i < 1000000000; i++) ;
MessageBox.Show("1");
}
درسته. حق با شماست. امتحان کردم ظاهرا تفاوتی نداشت.

MAHDIhp_devsq
چهارشنبه 26 مهر 1391, 12:18 عصر
بهترین راه اگر حرفه ای نیستید استفاده از BackGroundWorker است. در رویداد Dowork کد زمان بر را بنویس و در پایان در رویداد complate فرم بعدی را نمایش بده.در هنگاه اجرای رویداد Dowork فرم شما نمایش داده میشود و قابل کلیک و جابجایی است
در ضمن با متد RunAsyn میتوانید متد Dowork را فراخوانی کنید.
برای دیدن مثال عملی با در همین سایت یا Codeproject.com جستجو کنید.
موفق باشید.