2015-10-18 119 views
-1

我怎樣才能顯示自定義的背景工人的取消事件取消消息背景工人自取消消息

我使用DoWork的事件下面的代碼取消工人

string custom_cancel_msg="Cancelling BG WORKER due to some xxx reeasons"; 
if (bw.WorkerSupportsCancellation == true) 
{ 
     bw.CancelAsync(); 
} 

我該怎麼讓這在完成的事件。我只能訪問下面的事情

if ((e.Cancelled == true)) 
     { 
      lblMessage.Text = "Transaction Canceled in between!"; 
      //HOW CA|N I ACCESS THE CUSTOM MESSA|GE HERE?????????????????? 
     } 

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

     else 
     { 
      lblMessage.Text = "Done!"; 
     } 
+0

這將幫助,如果你表現出多一點的上下文,但你的代碼相同的課程的一部分? –

+0

在** Form **級別聲明'custom_cancel_msg',而不是本地變量。 –

回答

1

代碼示例:

public partial class BackgroundWorkerSample : Form 
{ 
    private BackgroundWorker work = null; 
    public string CustomMessage { get; set; } 
    public BackgroundWorkerSample() 
    { 
     InitializeComponent(); 

     work = new BackgroundWorker(); 
     work.WorkerSupportsCancellation = true; 
     work.WorkerReportsProgress = true; 
     work.DoWork += worker_DoWork; 
     work.ProgressChanged += worker_ProgressChanged; 
     work.RunWorkerCompleted += worker_RunWorkerCompleted; 
    } 

    private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     if (e.Cancelled) 
     { 
      lblStatus.ForeColor = Color.Red; 
      lblStatus.Text = CustomMessage; 
     } 
     else 
     { 
      lblStatus.ForeColor = Color.Green; 
      lblStatus.Text = $"Result is : {e.Result}"; 
     } 
    } 

    private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     lblStatus.Text = $"Calculating result... ({ e.ProgressPercentage }%)"; 
    } 

    private void worker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     for (int i = 0; i <= 100; i++) 
     { 
      if (work.CancellationPending == true) 
      { 
       e.Cancel = true; 
       return; 
      } 
      work.ReportProgress(i); 
      System.Threading.Thread.Sleep(250); 
     } 
     e.Result = 42; 
    } 

    private void btnStart_Click(object sender, EventArgs e) 
    { 
     work.RunWorkerAsync(); 
    } 

    private void btnCancel_Click(object sender, EventArgs e) 
    { 
     CustomMessage = "Calculation cancelled by user"; 
     work.CancelAsync(); 
    } 
} 

正如你所看到的,CustomMessage被定義爲一個類的成員,而不是在DoWork的一個局部變量,所以它的可用表格中的任何位置。

請注意我的C#6插弦;-)

乾杯使用