PDA

View Full Version : سوال: مشکل در ایجاد Loading برای برنامه



ehsan446
جمعه 03 شهریور 1391, 16:02 عصر
سلام
دوستان من یک برنامه دارم که باید قبل از اجرا در یک فرم به نام Loading یک سری فابل را Load کند که در این فرم نمیتوانم از هیچ کامپوننتی استفاده کنم و تمامی کدهای برنامه باید در Load فرم نوشته شود.
من فقط در فرم یک progressbar دارم که به میزان بارگذاری فایل ها پر میشود
مشکل اینجاس که وقتی برنامه اجرا می شود ابتدا کدها اجرا میشود و فایل ها بارگذاری میشوند و پروگرس بار پر میشود سپس فرم نمایش داده میشود(چون کدها در event لودِ فرم قرار داده شده)
چیکار باید بکنم ک فرم نمایش پیدا کنه بعد کدها اجرا بشه بدون اینکه کاربر بخواهد کاری کند یا جایی کلیک کند

Farshid007
جمعه 03 شهریور 1391, 16:27 عصر
از Threat استفاده کن
یا بک گراند ورکر
یا اگه نمی خواهی چند نخی کنی
کد هاتو بزار تو رویداد Shown فرم

saman_h
جمعه 03 شهریور 1391, 16:33 عصر
دوستمون درست میگن . البته از همون Thread استفاده کنی خیلی بهتره
شما یه تابع درست کن و تمام کدهایی که قراره اجرا بشه رو بذار داخل اون تابع و مثلا اسمش رو بذار : Load
حالا اینجوری توی Event فرم لود او تابع رو صدا بزن : Thread _t1 = new Thread((new ThreadStart(Load)));
_t1.Start();

ehsan446
جمعه 03 شهریور 1391, 23:46 عصر
دوستای عزیز از thread استفاده کردم اما امکان دسترسی به progressbar رو نمیده گراند ورکر هم نمیدونم چیه:ناراحت:

Pr0grammer
شنبه 04 شهریور 1391, 00:18 صبح
دوستای عزیز از thread استفاده کردم اما امکان دسترسی به progressbar رو نمیده گراند ورکر هم نمیدونم چیه:ناراحت:
برای دسترسی به اشیاء (مثلProgressBar) در Thread ، باید درمورد delegate جستجو کنید....

ali_habibi1384
شنبه 04 شهریور 1391, 08:09 صبح
دوستای عزیز از thread استفاده کردم اما امکان دسترسی به progressbar رو نمیده گراند ورکر هم نمیدونم چیه:ناراحت:
خب ساده ترين راهش استفاده از تايمر و يك متغير سراسري.متغير سراسري رو توي ترد به ازاي هر فايلي كه لود كرد بهش مقدار بديد سپس هر 100 ميلي ثانيه توي تايمر بخونيدش و به prorgresbar مقدار بديد.

hakim22
شنبه 04 شهریور 1391, 10:00 صبح
شما از رویداد Application_StartUp استفاده کنید.

ابتدا فرم رو میسازید و نمایش میدهید و بعد ادامه ی کدهایی که باید اجرا شوند رو در خطوط بعدی مینویسید و بعد از لود شدن هر فایل Progressbar رو پر می کنید.

uniqueboy_ara
شنبه 04 شهریور 1391, 12:50 عصر
یه راه خیلی راحت واسه این کار وجود داره
شما اول یه فرم با نام frmSplash درست کن ( همون فرمی که قراره در زمان لود فرم نمایش داده بشه )
بعدش این کد ها رو به برنامه ت اضافه کن:

کلاس Program.cs رو به این شکل تغیر بده:
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Splash
{

static class Program
{
public static frmSplash Splash = null;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Splash = new frmSplash();
Splash.Show();
Splash.Refresh();
Application.Run(new Form1());

}
}
}

این کدها رو هم توی رویداد FormLoad فرم اصلی برنامه ت بنویس ( میتونی اون Sleep رو حذف کنی، چون من فقط واسه اینکه یه مقداری طول بکشه تا Splash بسته بشه اونو نوشتم):
private void Form1_Load(object sender, EventArgs e)
{
Program.Splash.Refresh();
System.Threading.Thread.Sleep(3000);
//تمام کد های مربوط به لود شدن فرم اینجا قرار میگیرن
Program.Splash.Close();
}

ehsan446
یک شنبه 05 شهریور 1391, 12:27 عصر
دوستان ممنون
کسی میتونه گراند ورکر رو توضیح بده که چطور میشه باش کار کرد؟