winforms 如何使用BackgroundWorker更新Form1上的多个控件?

ssgvzors  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(175)

我找到了几个示例,说明如何使用BackgroundWorker更新UI控件。
例如以下代码:

BackgroundWorker backgroundWorker1 = new BackgroundWorker();  
backgroundWorker1.WorkerReportsProgress = true;  

//start the operation on another thread  
private void btnStart_Click(object sender, EventArgs e)  
{  
    backgroundWorker1.RunWorkerAsync();  
}  

//DoWork event handler is executed on a separate thread  
private void backgroundWorker1_DoWork(object sender, DoWorkeventArgs e)  
{  
    //a long running operation  
    for (int i = 1; i < 11; i++)  
    {     
        Thread.Sleep(2000);  
        backgroundWorker1.ReportProgress(i * 10);  
    }  
}  

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)  
{  
    progressBar1.value = e.ProgressPercentage;  
}

我在这里找到的:
https://www.c-sharpcorner.com/UploadFile/Ashush/using-the-backgroundworker-component
问题是,我找到的所有示例都显示了如何更新窗体上的“仅一个"控件。例如,我给出的代码演示了如何更新progressBar值。
但这不是一个现实的情况,在现实世界中,我通常会想更新我的表单上的SEVERAL控件。

例如:

进度条1。值= 54;
列表框1。所选索引= 2;
按钮1.背景颜色=颜色.黄色;
图像1.左侧=图像1.左侧+20;
我如何修改我展示的代码,以便更新我在前面几行中给出的控件?一定有一个简单的方法可以做到这一点。顺便说一下,我的应用程序使用了几个线程,每个线程都必须在运行时**更新UI上的几个控件...
我希望我的问题已经很清楚了,谢谢。

编辑:

Neil建议我在这个帖子中找到解决方案:
How do I update the GUI from another thread?
但我看到那里的人推荐使用BackgroundWorker...这正是我要问的。
他们没有解释如何使用此方法来并行更新多个UI控件。

bcs8qyzn

bcs8qyzn1#

请尝试以下操作:

button1.Invoke(
    new Action(
        () =>
        button1.BackgroundColor = Color.Yellow;
        )
    );
image1.Invoke(
    new Action(
        () =>
        image1.left = image1.left + 20;
        )
    );
//etc.

相关问题