后台工作人员委托&调用器
本文关键字:调用 工作人员 后台 | 更新日期: 2023-09-27 18:12:29
我有一个后台工作器,它做了许多GUI交互,但我的问题是所有这些对象都在主线程中(据我所知),我需要调用所有这些对象,这使得我的代码更长,可读性更差。
你知道我怎样才能创建一个通用方法来调用那些GUI元素吗?
2)有没有更简单的方法来解决这个问题?
使用BackgroundWorker,您可以报告进度并传递完成百分比和对象。您可以创建一个类来包含要传递给UI的数据,然后将其作为对象传递。
ProgressChanged事件可以操作UI对象,因为它将在UI线程中运行。
问题示例
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
List<string> items = new List<string>();
items.Add("Starting");
System.Threading.Thread.Sleep(2500);
backgroundWorker1.ReportProgress(25, items.ToArray());
items.Add("Halfway there");
System.Threading.Thread.Sleep(2500);
backgroundWorker1.ReportProgress(50, items.ToArray());
items.Add("Almost there");
System.Threading.Thread.Sleep(2500);
backgroundWorker1.ReportProgress(75, items.ToArray());
items.Add("Done");
System.Threading.Thread.Sleep(2500);
backgroundWorker1.ReportProgress(100, items.ToArray());
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.AddRange((string [])e.UserState);
this.Text = e.ProgressPercentage.ToString();
}
ReportProgress中的第二个参数是Object类型。你可以在里面放任何你想放的东西,然后在另一边把它强制转换成合适的类型。