Фонработник прогрессировал событие c # - PullRequest
0 голосов
/ 13 февраля 2019

Я использую фоновый рабочий в 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;
    }

Я хочу добавить userstate в listbox2 и в то же время хочу показать это во всплывающем окне, которое я создал в другой форме.Я закомментировал 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);

Возможно ли это?

1 Ответ

0 голосов
/ 13 февраля 2019

Оператор 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 ... таким образом, вы можете добавить вещи в свою логику позже и не попасть в этот тип тонкой ошибки.

...