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 语句块中...这样您以后就可以将内容添加到您的逻辑中,而不会陷入这种微妙的错误。
我在 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 语句块中...这样您以后就可以将内容添加到您的逻辑中,而不会陷入这种微妙的错误。