簡體   English   中英

后台工作人員進度更改事件C#

[英]Backgroundworker progresschanged event c#

我在winforms中使用后台工作者。 backgroundworker_progresschanged事件中, e.userstate是要添加到listbox 同時,我想在彈出窗口中顯示e.userstate

這是我的代碼:

backgroundworker_progresschanged事件中, setlable()是另一個類的方法。

 public void SetLable(string pbValue)
    {
        try
        {
            label1.Text = pbValue;

        }
        catch (Exception ex)
        { }
        label1.ForeColor = Color.Red;
    }

我想在listbox2添加userstate ,同時要在以其他形式創建的彈出窗口中顯示該狀態。 我已將listbox.items.add注釋掉,因為兩者不能同時工作。

private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
    {
        List<string> result1 = new List<string>();

        var found = obj.getFiles();

        foreach (var item in found)
        {
            if (item.Contains("ERROR"))
            {
                result1.Add(item);

                (sender as BackgroundWorker).ReportProgress(0, item);

            }
            else
                (sender as BackgroundWorker).ReportProgress(0);
            System.Threading.Thread.Sleep(500);

        }
        e.Result = result1;
    }

    private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        if (e.UserState != null)
            pop.SetLable(e.UserState.ToString());
       // listBox2.Items.Add(e.UserState);

    }

我希望兩個人同時工作。

   pop.SetLable(e.UserState.ToString());
// listBox2.Items.Add(e.UserState);

這可能嗎?

if語句僅執行緊隨其后的語句。 如果您打算發生多件事,請使用一個塊:

private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    if (e.UserState != null)
    {
        pop.SetLable(e.UserState.ToString());
        listBox2.Items.Add(e.UserState.ToString());
    }
}

養成在創建每個if語句時立即在兩個方括號中輸入的習慣(其他部分都一樣!)。 即使單個語句也應該包含在if / else語句的塊中...這樣,您以后就可以在邏輯中添加內容,而不會陷入這種細微的錯誤中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM