آموزش BackgroundWorker در سی شارپ
سلام توسعه دهندگان گرامی در این سری از آموزش برنامه نویسی سی شارپ به آموزش BackgroundWorker در سی شارپ می پردازیم از BackgroundWorker در سی شارپ به منظور انجام کار پس زمینه و بدون freeze شدن صفحه برنامه استفاده می شود در ادامه با ما همراه باشید تا نحوه استفاده از BackgroundWorker را سی شارپ یاد گیرید.
در ابتدای کار شما باید یک شئی از BackgroundWroker را از بخش ToolBox سی شارپ drag کرده و در فرم خود قرار دهید از عکس زیر نیز می توانید کمک گیرید.

بروی background worker کلیک کنید و کد زیر generate می شود.
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(1000); // One second.
}
}
}
در بالا یک متد Sleep هم قرار دادیم.
کلاس Background یک متد به نام RunWorkerAsync دارد که برای اجرا یک شئی مورد استفاده قرار میگیرید.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
TestObject test = new TestObject
{
OneValue = 5,
TwoValue = 4
};
backgroundWorker1.RunWorkerAsync(test);
}
}
class TestObject
{
public int OneValue { get; set; }
public int TwoValue { get; set; }
}
یک Event به نام backgroundWorker1_RunWorkerCompleted نیز دارد که زمانی که یک کار به صورت کامل به پایان می رسد وارد این متد یا void می شود.
private void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
TestObject test = e.Result as TestObject;
this.Text = test.OneValue.ToString() + " " + test.TwoValue.ToString();
}
از این کلاس بیشتر همراه با ProgressBar استفاده می شود تا بتوان بررسی کرد چه زمانی کار مورد نظر به پایان رسیده است.
برای اینکه همراه با ProgressBar استفاده کنید باید از سه void زیر استفاده کنید.
private void parseButton_Click(object sender, EventArgs e)
{
parseButton.Enabled = false;
myBGWorker.RunWorkerAsync();
}
private void myBGWorker_DoWork(object sender, DoWorkEventArgs e)
{
for(int i = 0; i < filesCount; i++)
{
ParseSingleFile();
int percentage = (i + 1) * 100 / filesCount;
myBGWorker.ReportProgress(percentage);
}
}
void myBGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
myProgressBar.Value = e.ProgressPercentage;
}
void myBGWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
parseButton.Enabled = true;
MessageBox.Show("Done");
}
کد کامل شده بالا برای دوستانی که در کد نویسی مبتدی هستند.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Shown += new EventHandler(Form1_Shown);
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}
void Form1_Shown(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
// On worker thread so do our thing!
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
System.Threading.Thread.Sleep(100);
}
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// The progress percentage is a property of e
progressBar1.Value = e.ProgressPercentage;
}
}
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
آموزش برنامه نویسی اندروید |