2012-04-19 5 views
-2

可能性の重複は:
how to use a backgroundworker?BackgroundWorkerのC#の

アプリはいくつかの処理を行いながら、凍結からGUIを維持するために使用するBackgroundWorkerのか、私がしなければならないの使用方法の良い説明をして私を指すください。長いプロセス?

私はpingを実行するとフリーズします。それはちょっと迷惑なものです。pingを実行している間に別のホストにpingを実行した結果を表示したいのですが、リスト内のすべてのホストにpingを実行するまで停止します。ここで

+2

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx?ppud=4 – RQDQ

+1

あなたはあなたが凍ったときにそれをどのように使っているかを示すことから利益を得るかもしれません。私はそのような問題は一度もありませんでした。 –

+0

http://msdn.microsoft.com/en-us/library/hybbz6ke.aspx – heavyd

答えて

1

exampleです:

using System.ComponentModel; 
using System.Windows; 
using System.Windows.Controls; 

namespace SL_BackgroundWorker_CS 
{ 
    public partial class Page : UserControl 
    { 
     private BackgroundWorker bw = new BackgroundWorker(); 

     public Page() 
     { 
      InitializeComponent(); 

      bw.WorkerReportsProgress = true; 
      bw.WorkerSupportsCancellation = true; 
      bw.DoWork += new DoWorkEventHandler(bw_DoWork); 
      bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); 
      bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); 
     } 
     private void buttonStart_Click(object sender, RoutedEventArgs e) 
     { 
      if (bw.IsBusy != true) 
      { 
       bw.RunWorkerAsync(); 
      } 
     } 
     private void buttonCancel_Click(object sender, RoutedEventArgs e) 
     { 
      if (bw.WorkerSupportsCancellation == true) 
      { 
       bw.CancelAsync(); 
      } 
     } 
     private void bw_DoWork(object sender, DoWorkEventArgs e) 
     { 
      BackgroundWorker worker = sender as BackgroundWorker; 

      for (int i = 1; (i <= 10); i++) 
      { 
       if ((worker.CancellationPending == true)) 
       { 
        e.Cancel = true; 
        break; 
       } 
       else 
       { 
        // Perform a time consuming operation and report progress. 
        System.Threading.Thread.Sleep(500); 
        worker.ReportProgress((i * 10)); 
       } 
      } 
     } 
     private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 
      if ((e.Cancelled == true)) 
      { 
       this.tbProgress.Text = "Canceled!"; 
      } 

      else if (!(e.Error == null)) 
      { 
       this.tbProgress.Text = ("Error: " + e.Error.Message); 
      } 

      else 
      { 
       this.tbProgress.Text = "Done!"; 
      } 
     } 
     private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%"); 
     } 
    } 
} 
0
BackgroundWorker worker = new BackgroundWorker(); 

public Form1() 
{ 
    InitializeComponent(); 

    worker.DoWork += worker_DoWork; 
    worker.RunWorkerCompleted += worker_RunWorkerCompleted; 
    worker.RunWorkerAsync();//Calls worker_DoWork on a separate thread. 
} 

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)//Runs when worker_DoWork is completed. 
{ 
    // 
} 

void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // 
} 
関連する問題