ایجاد پنجره Non Freezing در#C

جمعه 27 آذر 1394

در این مقاله قصد داریم یک پنجره وب فرم ساده بسازیم و رویدادی برای توقف برنامه و رویدادی برای اجرا کردن برنامه در ویندوز فرم بنویسیم

ایجاد پنجره Non Freezing در#C

ابتدا یک پروژه ی جدید ایجاد نمایید به صورت زیر:

یک دکمه داخل صفحه قرار دادیم برای دکمه رویداد زیر را می نویسیم:

private void button1_Click(object sender, EventArgs e)  
{  
    for (var i = 0; i <= 1000000; i++)  
    {  
        label1.Text = @"Count : " + i;  
    }  
}

زمانی که روی دکمه کلیک نمایید می توانید freez شدن نرم افزار را مشاهده نمایید.

اگر task Manager خود را باز نمایید آن را مشاهده خواهید کرد.

حالا یک دکمه ی دیگر قرار می دهید و رویداد زیر را در داخل آن می نویسید:

رویداد به صورت زیر خواهد بود:

    //attributes used to refresh UI  
    private readonly SynchronizationContext synchronizationContext;  
    private DateTime previousTime = DateTime.Now;  
      
    public Form1()  
    {  
        InitializeComponent();  
        synchronizationContext = SynchronizationContext.Current; //context from UI thread  
    }  
      
      
    private async void button2_Click(object sender, EventArgs e)  
    {  
        button1.Enabled = false;  
        button2.Enabled = false;  
        var count = 0;  
      
        await Task.Run(() =>  
        {  
            for (var i = 0; i <= 1000000; i++)  
            {  
                UpdateUI(i);  
                count = i;  
            }  
        });  
        label1.Text = @"Count : " + count;  
        button1.Enabled = true;  
        button1.Enabled = false;  
    }  
      
    public void UpdateUI(int value)  
    {  
        var timeNow = DateTime.Now;  
      
        //Here we only refresh our UI each 50 ms  
        if ((DateTime.Now - previousTime).Milliseconds <= 50) return;  
      
        //Send the update to our UI thread  
        synchronizationContext.Post(new SendOrPostCallback(o =>  
        {  
            label1.Text = @"Count : " + (int)o;  
        }), value);  
      
        previousTime = timeNow;  
    }  

کلمه ی ASYNC را که در رویداد خود قرار داده ایم برای جلوگیری از از Freez شدن نرم افزار است.و زمانی که دکمه را فشار دهیم شروع به شمارش می کند که هر 50 میلی ثانیه label ای که قرار داده ایم به روز رسانی می شود.

خروجی به صورت زیر خواهد بود:

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 1k بازدید
  • 3 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید