آموزش BackgroundWorker در سی شارپ
سلام توسعه دهندگان گرامی در این سری از آموزش برنامه نویسی سی شارپ به آموزش BackgroundWorker در سی شارپ می پردازیم از BackgroundWorker در سی شارپ به منظور انجام کار پس زمینه و بدون freeze شدن صفحه برنامه استفاده می شود در ادامه با ما همراه باشید تا نحوه استفاده از BackgroundWorker را سی شارپ یاد گیرید.
در ابتدای کار شما باید یک شئی از BackgroundWroker را از بخش ToolBox سی شارپ drag کرده و در فرم خود قرار دهید از عکس زیر نیز می توانید کمک گیرید.
بروی background worker کلیک کنید و کد زیر generate می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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. } } } |
کلاس Background یک متد به نام RunWorkerAsync دارد که برای اجرا یک شئی مورد استفاده قرار میگیرید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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; } } |
1 2 3 4 5 6 | private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { TestObject test = e.Result as TestObject; this.Text = test.OneValue.ToString() + " " + test.TwoValue.ToString(); } |
برای اینکه همراه با ProgressBar استفاده کنید باید از سه void زیر استفاده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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"); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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; } } |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.