PDA

View Full Version : سوال: اگر حلقه در کلاس دیگری باشد از Background Worker چطوری استفاده کنیم؟



دلتنگ اسمان
چهارشنبه 25 دی 1392, 19:00 عصر
سلام
من میخوام از Background Worker استفاده کنم اما حلقه ای که باید در dowork باشه در یه کلاس دیگه است.
چطوری میشه ازBackground Worker در این حالت استفاده کرد؟

Mahmoud.Afrad
پنج شنبه 26 دی 1392, 18:17 عصر
یک نمونه از کلاس بسازید . از شئ ساخته شده متد را فراخوانی کنید.

دلتنگ اسمان
پنج شنبه 26 دی 1392, 18:59 عصر
یک نمونه از کلاس بسازید . از شئ ساخته شده متد را فراخوانی کنید.
اونوقت اگه از کدهایی شبیه زیر داشتیم که تو حلقه استفاده میشن چیکار باید کرد؟
System.Threading.Thread.Sleep(50);
backgroundWorker1.ReportProgress(i, DateTime.Now);


if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}

khokhan
شنبه 28 دی 1392, 19:33 عصر
-----------------------------
اینه اون کلاس BW:


using System;
using System.Collections.Generic;
using System.Linq;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.ComponentModel;
using BW_class;

namespace LoadingClass
{
public class BackgroundLoading
{
public delegate void RunFunction();

public BackgroundWorker Bw;
public RunFunction thisFunction;
LoadingForm newLoading;

public BackgroundLoading(RunFunction newFunction)
{
thisFunction = newFunction;
Bw = new BackgroundWorker();
Bw.DoWork += new DoWorkEventHandler(Bw_DoWork);
Bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Bw_RunWorkerComplet ed);
}

public void Start()
{
Bw.RunWorkerAsync();
newLoading = new LoadingForm();
newLoading.ShowDialog();
}

void Bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
newLoading.Dispose();
MessageBox.Show("Complete");
}

void Bw_DoWork(object sender, DoWorkEventArgs e)
{
if (thisFunction != null)
thisFunction();
}
}
}

فراخوانی در فرم اصلی :

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public decimal Idx;
public decimal Maximum = 9000000;
public LoadingForm LoadingForm;
private void Form1_Load(object sender, EventArgs e)
{

}
public void Counter()
{
for (int i = 0; i <= Maximum; i++)
{
Idx = i;
}
}

private void button1_Click(object sender, EventArgs e)
{
LoadingClass.BackgroundLoading BL = new LoadingClass.BackgroundLoading(Counter);
BL.Start();
}
}

دلتنگ اسمان
شنبه 28 دی 1392, 21:26 عصر
واقعا ممنون جناب khokhan (http://barnamenevis.org/member.php?131732-khokhan) مثل همیشه کارتون کامل و درسته. مشکلم حل شد.