PDA

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



zohre66
چهارشنبه 01 مرداد 1393, 09:00 صبح
با سلام و احترام
من در پروژه ام یه فرمی دارم که کنترل های زیادی روی ان هست و به خاطر همین لود ان تاخیر دارد می خواهم هم قبل از لود شدن کامل ان یه پروکسس بار باشه و وقتی کار لود ان فرم به اتمام رسید ان فرم لود شود .(کنترل ها هم توسط یه حلقه توسط کد ساخته می شوند) چه روشی را پیشنهاد می کنید؟؟

juza66
چهارشنبه 01 مرداد 1393, 09:04 صبح
پیشنهاد من: BackgroundWorker (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)

و این مثال:

Basic example


bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.ProgressChanged += new DoWorkEventHandler(bgWorker_ProgressChanged);
bgWorker.RunWorkerAsync(//pass in object to process)


Which would then kickoff


private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
//Do all of your work here
bgWorker.ReportProgress(); //percent done calculation
}


Then the Progress changed event would fire to update the UI safely


private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}

zohre66
چهارشنبه 01 مرداد 1393, 09:24 صبح
مشکلی که دارم این هست
از چند تا حلقه for استفاده شده که جاهای و تو چند تا تابع هم هست از هم پراکنده هستند

juza66
چهارشنبه 01 مرداد 1393, 09:26 صبح
کدتون رو بذارید تا درباره نحوه لود بررسی شود

juza66
چهارشنبه 01 مرداد 1393, 09:29 صبح
bool loading = true;


Thread myThread = new Thread(new ThreadStart(Loading));
myThread .Start();

حلقه های خود رو مرتب و در لود صفحه بذارید


private void Loading()
{
while(loading)
{
//Display loading message here.
}
}

zohre66
چهارشنبه 01 مرداد 1393, 09:41 صبح
bool loading = true;


Thread myThread = new Thread(new ThreadStart(Loading));
myThread .Start();

حلقه های خود رو مرتب و در لود صفحه بذارید


private void Loading()
{
while(loading)
{
//Display loading message here.
}
}

از پاسختون خیلی ممنون اما لطفا می کنید بیشتر در مورد این توضیح بدهید نمونه پروژه ای از این دارید؟؟

shahryari
چهارشنبه 01 مرداد 1393, 11:32 صبح
دوست عزیز شما یکبار این سوالو مطرح کردید و منهم جوابشو دادم
بیرون از حلقه ، ماکزیمم پروگرس بار (نه پروکسس) رو برابر تعداد چرخش حلقه قرار بده و در داخل حلقه یک واحد به value پروگرس بار اضافه کن
و بعد از اون متد Application.DoEvanes(); را فراخوانی کن

حميدسي شارپ
پنج شنبه 02 مرداد 1393, 01:13 صبح
bool loading = true;


Thread myThread = new Thread(new ThreadStart(Loading));
myThread .Start();

حلقه های خود رو مرتب و در لود صفحه بذارید


private void Loading()
{
while(loading)
{
//Display loading message here.
}
}

میشه یه نمونه عملی از این کدو که میگین بزارین بیزحمت.البته دستی به پروگرس بار زمان ندین،مثلا نگین بعد از پنج ثانیه پر شو و فرم بعدو نشون بده.واقعا درست کار کنه.ممنون

abbas.oveissi
پنج شنبه 02 مرداد 1393, 01:58 صبح
این یک پروژه نمونه از ProgressBar،بجای استفاده مستقیم از Thread از کنترل BackgroundWorker استفاده کردم.وظیفه برنامه اینه 2تا حلقه For را تا آخر بره،پیشرفت برنامه با ProgressBar نشون داده میشه تا کاربر بدونه چقدر از حلقه ها مونده.

juza66
پنج شنبه 02 مرداد 1393, 08:28 صبح
این مثال


// StopJoin.cs
using System;
using System.Threading;

public class Alpha
{

// This method that will be called when the thread is started
public void Beta()
{
while (true)
{
Console.WriteLine("Alpha.Beta is running in its own thread.");
}
}
};

public class Simple
{
public static int Main()
{
Console.WriteLine("Thread Start/Stop/Join Sample");

Alpha oAlpha = new Alpha();

// Create the thread object, passing in the Alpha.Beta method
// via a ThreadStart delegate. This does not start the thread.
Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));

// Start the thread
oThread.Start();

// Spin for a while waiting for the started thread to become
// alive:
while (!oThread.IsAlive);

// Put the Main thread to sleep for 1 millisecond to allow oThread
// to do some work:
Thread.Sleep(1);

// Request that oThread be stopped
oThread.Abort();

// Wait until oThread finishes. Join also has overloads
// that take a millisecond interval or a TimeSpan object.
oThread.Join();

Console.WriteLine();
Console.WriteLine("Alpha.Beta has finished");

try
{
Console.WriteLine("Try to restart the Alpha.Beta thread");
oThread.Start();
}
catch (ThreadStateException)
{
Console.Write("ThreadStateException trying to restart Alpha.Beta. ");
Console.WriteLine("Expected since aborted threads cannot be restarted.");
}
return 0;
}
}




این هم منبع:
http://msdn.microsoft.com/en-us/library/aa645740%28v=vs.71%29.aspx

zohre66
جمعه 03 مرداد 1393, 05:58 صبح
یه کنترل روی فرمم دارم که InitializeComponent خیلی زمان می گیره برای این مورد چکاری باید انجام بدم؟؟