استفاده از BackgroundWorker با کمک Delegate

استفاده از BackgroundWorker با کمک Delegate

در آموزش های قبلی و در مبحث BackgroundWorker دیدیم که چگونه می توان حلقه های بینهایت را به راحتی اجرا کرد. اما برای کار با BackgroundWorker مجبور شدیم از روشی استفاده کنیم که Unsafe یا خطرناک بود. اگرچه نتیجه به ظاهر بدون عیب بود اما تغییر مقدار CheckForIllegalCrossThreadCalls به False خود معایبی را به همراه دارد که از بحث و حوصله این مطلب خارج است. بنابراین روش دیگری که ما نیز آن را پیشنهاد می کنیم وجود دارد و آن نیز استفاده از Delegate می باشد. حال با هم طریقه استفاده از این روش را میبینیم اما قبل از توضیح ابتدا به کدهای زیر توجه فرمائید. این قطعه کدهای قرار داده شده برای ما تعداد نامحدودی اعداد تصادفی ایجاد کرده و در Listbox قرار می دهند که در این روش از Delegate استفاده می کنیم.

قطعه کد مربوط به BackgroundWorker

While True
Dim rnd As New Random()
Update(rnd.Next().ToString)
End While

قطعه کد مربوط به Button

BackgroundWorker1.RunWorkerAsync()

قطعه کد مربوط به Delegate

Delegate Sub UpdateUI(text As String)
Public Sub Update(text As String)
If ListBox1.InvokeRequired Then
ListBox1.Invoke(New UpdateUI(AddressOf Update), text)
Else
ListBox1.Items.Add(text)
End If
End Sub

قطعه کد مربوط به BackgroundWorker

while (true){
Random rnd=new Random();
Update(rnd.Next().ToString);}

قطعه کد مربوط به Button

BackgroundWorker1.RunWorkerAsync();

قطعه کد مربوط به Delegate

delegate void UpdateUI(string text);
public void Update(string text){
if (ListBox1.InvokeRequired){
ListBox1.Invoke(new UpdateUI(Update), text);
}else{
ListBox1.Items.Add(text);}}

با توجه به کدهای قرار داده شده در قسمت اول و در بخش مربوط به BackgroundWorker یک حلقه بینهایت وجود دارد که به تعداد نامحدود اعداد تصادفی ایجاد می کند اما به صورت مستقیم در Listbox اضافه نمی کند و مقدارها را به تابع Update که عملیاتش را بوسیله Delegate انجام می دهد ارسال می کند. در بخش دوم که مربوط به دکمه می باشد تنها BackgroundWorker را فعال می کند و کار دیگری انجام نمی دهد اما در بخش آخر که همان تابع اصلی است ، یک Delegate تعریف کرده و تابعی با نام Update به آن انتصاب می دهید که وظیفه این تابع همان طور که معلوم است دریافت اطلاعات و اضافه کردن به Listbox می باشد. کار با Delegate بسیار ساده است اما برای درک بهتر آن پیشنهاد می کنیم چند نمونه از آن را برای خود انجام داده و با تغییر کدها از آن استفاده کنید.



نظرات کاربران



عبارت امنیتی : حاصل 8 × 6 می شود :
متن پیام :