Backgroundworker progresschanged 事件 c#

Backgroundworker progresschanged event c#

我在 winforms 中使用后台工作者。 在 backgroundworker_progresschanged 中,事件 e.userstate 是要添加到 listbox 中的项目。 同时我想在弹出 window.

上显示 e.userstate

这是我的代码:

backgroundworker_progresschanged事件中setlable()是来自另一个class的方法。

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

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

我想在 listbox2 中添加 userstate,同时想在我以另一种形式创建的弹出窗口 window 中显示它。 我已经注释掉 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 语句块中...这样您以后就可以将内容添加到您的逻辑中,而不会陷入这种微妙的错误。