cara agar aplikasi User Interface tidak terlihat nge-hang jika terdapat banyak proccess

 on Monday, February 1, 2016  

Baiklah, ada seorang temen bertanya bagaimana caranya agar aplikasi tidak nge-hang kalau punya banyak proccess didalamnya?

Sekedar berbagi pengalaman waktu ngambil freelance membuat import data excel ribuan. awalnya saya juga kesusahan si. kok setelah jadi aplikasinya ketika import data. kok terlihat nge-hang ya.. padahal datanya masuk? aneh juga kan jika user bertanya, kok aplikasinya nghang mas? mau jawab apa coba! hahaha.

untuk itu saya mau berbagi nih. bagi yang sedang mengalami hal yang sama, baek newbie atau profesional.

di dotnet ada komponen bernama "Background Worker" ini sebetulnya turunan dari thread/multi threading. yang di bungkus sedemikian rupa hingga enak di pakai. gambar di samping ini penampakannya.

Cumba bagaimana cara menggunakannya? Baiklah mari kita mulai.
Pertama2 anda harus membuat form anggap saja form1 buatlah seperti gambar berikut dan kemudian tariklah (drag) icon yang di tunjuk dengan tanda pada diatas ke atas form1. Kemudian klik kanan Object Backgroung Worker yang sudah di drag.

Didalam contoh ini ada empat (4) event yang saya buat agar mudah di pahami.
1. event tombol click "test", trigger untuk memulai proses
2. event backgroundWorkerTest_DoWork --> bertugas untuk melakukan pekerjaan yg di tugasi oleh tombol test
3. event backgroundWorkerTest_ProgressChanged --> bertugas untuk melaporkan status/ progress kepada UI/tampilan
4. event backgroundWorkerTest_RunWorkerCompleted --> bertugas untuk memberi notifikasi jika sudah selesai.

ini code selengkapnya.
  private void buttonTest_Click(object sender, EventArgs e)  
     {  
       //object list  
       List<string> objectList = new List<string>();  
       //isi dulu dengan data yang kita mau  
       for (int i = 0; i < 100; i++)  
       {  
         objectList.Add(string.Format("ini adalah data ke-{0}", i));  
       }  
       progressBarStatus.Maximum = objectList.Count;  
       backgroundWorkerTest.WorkerSupportsCancellation = true;  
       backgroundWorkerTest.WorkerReportsProgress = true;  
       backgroundWorkerTest.RunWorkerAsync(objectList);  
     }  
     private void backgroundWorkerTest_DoWork(object sender, DoWorkEventArgs e)  
     {  
       BackgroundWorker bg = (BackgroundWorker)sender;  
       //tangkep lagi parameter object list  
       List<string> objectList = (List<string>)e.Argument;  
       for (int i = 1; i <= objectList.Count; i++)  
       {  
         Thread.Sleep(100);  
         bg.ReportProgress(i, objectList[i - 1]);  
       }  
       e.Result = "Selesai tanpa error";  
     }  
     private void backgroundWorkerTest_ProgressChanged(object sender, ProgressChangedEventArgs e)  
     {  
       progressBarStatus.Value = e.ProgressPercentage;  
       textBoxStatus.Text = (string)e.UserState;  
     }  
     private void backgroundWorkerTest_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)  
     {  
       if (e.Error != null) MessageBox.Show(e.Error.ToString());  
       else if (e.Cancelled) MessageBox.Show("Proses berhasil di cancel");  
       else MessageBox.Show(e.Result.ToString());  
     }  


Maka setelah di jalankan akan seperti tampilan berikut ini.

Dalam tulisan ini saya sertakan juga contoh agar para newbie bisa langsung download disini dan mempelajari dengan seksama. anda bisa bertanya dengan meninggalkan komentar dibawah. dan ingat ketika anda sudah bisa. tularkan ke temen2 yang belom bisa. selamat mencoba!!!..

Contoh didalam zip ini dijalankan dengan Visual Studio 2010, Dotnet Framework 4.0, Window Application (windows 10 pro)

Salam,
Indahnya berbagi
cara agar aplikasi User Interface tidak terlihat nge-hang jika terdapat banyak proccess 4.5 5 .NET-1235 Monday, February 1, 2016 Baiklah, ada seorang temen bertanya bagaimana caranya agar aplikasi tidak nge-hang kalau punya banyak proccess didalamnya? Sekedar berbagi...


No comments:

Post a Comment

Copyright © .Net-1235. All Rights Reserved.