PDA

View Full Version : مشکل در استفاده از BackGroundWorker



dr_jacky_2005
دوشنبه 03 آبان 1389, 08:54 صبح
من یک فرم لودینگ دارم که تووش پروگرس بار است.
یک فرم هم دارم که تووش درخت است و با تابعی پر از دیتا میشود.
اینگونه عمل کرده ام:
این رو نوشتم توو فرم که درخت تووشه که بتونم فرم لودینگ رو شو کنم:

LoadingForm frmp;اینم توو لود فرمه که تووش درخته:

frmp = new LoadingForm();
frmp.Show();
this.Cursor = Cursors.WaitCursor;
backgroundWorker1.RunWorkerAsync();اینم توو دوو ورک بکگرادنورکر:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int returnedRecordCount = 100;
for (int i = 1; i <= returnedRecordCount; i++)
{
if (this.backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
this.backgroundWorker1.ReportProgress(i);

System.Threading.Thread.Sleep(20);
}
if (TrvCoding.InvokeRequired)
{

TrvCoding.Invoke(new MethodInvoker(delegate { TvfCoding.LoadTreeFullDate(); }));

//TvfCoding.LoadTreeFullDate();
}
}اینم توو کامپلیت:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Cursor = Cursors.Default;
frmp.Close();
//frmp.Hide();
}اینم وقتی که فرمه که تووش درخته،دارخ بسته میشه:

private void HesabStateWorkForm_FormClosed(object sender, FormClosedEventArgs e)
{
if (this.backgroundWorker1.IsBusy) this.backgroundWorker1.CancelAsync();
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage <= this.frmp.progressBar1.Maximum)
{
this.frmp.progressBar1.Value = e.ProgressPercentage;
}
}اینم توو لود فرم لودینگ:

progressBar1.Value = 0;
for (int x = 0; x < 100; x++)
{
if (progressBar1.Value < progressBar1.Maximum)
{
//System.Threading.Thread.Sleep(10);
progressBar1.Value++;
}
}اینا هم نکته ها:
دو تا پروپرتی توانایی کنسل کردن و گزارش دادن true است.
و
فرم لودینگ هم TopMost = true

سوالات:
الآن همه چی میاد،عالی...
ولی
اول لودینگ میاد،بعد پر شدن درخت شروع میشه!

من میخوام هم زمان باشن!


دومین چیزی که میخوام اینه که پر شدن لودینگ متناسب باشه به مقداری که لازمه.

اگر مورد بالا نشد،میخوام که پروگرس بار بلوکی نباشد،marquee باشد.(style)