为两个函数依次调用backgroundWorker1.RunWorkerAsync()函数c#windowsform

为两个函数依次调用backgroundWorker1.RunWorkerAsync()函数c#windowsform,c#,backgroundworker,windows-forms-designer,C#,Backgroundworker,Windows Forms Designer,我想为两个函数逐个调用backgroundWorker1.RunWorkerAsync()函数,但出现以下错误: “此BackgroundWorker当前正忙,无法同时运行多个任务。” 我知道有什么问题。有没有办法做到这一点?这是我想做的一个例子,事实上有很多字符串和函数,一个接一个 如果无法创建windowsForm以在标签中逐个显示我的第一个字符串[]元素,以及在完成后重新开始并在同一标签中显示我的第二个字符串[]元素,该如何创建 public Form1() { Initialize

我想为两个函数逐个调用backgroundWorker1.RunWorkerAsync()函数,但出现以下错误:

“此BackgroundWorker当前正忙,无法同时运行多个任务。”

我知道有什么问题。有没有办法做到这一点?这是我想做的一个例子,事实上有很多字符串和函数,一个接一个

如果无法创建windowsForm以在标签中逐个显示我的第一个字符串[]元素,以及在完成后重新开始并在同一标签中显示我的第二个字符串[]元素,该如何创建

public Form1() {
   InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
   looking();
}

public void looking()
{
   a();
   b();
}

public void a()
{
   string[] stringArray = { "Ali", "Hasan", "Morad", "Javad" };
   backgroundWorker1.RunWorkerAsync(stringArray);
}

public void b()
{
   string[] stringArray2 = { "Ali2", "Hasan2", "Morad2", "Javad2", "Mahmood", "Shaparak" };
   backgroundWorker1.RunWorkerAsync(stringArray2);
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
   ...
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
   ...
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
   ...
}

如今,使用
Backgroundworker
不再被认为是一种好的做法。看看
在你的情况下,你可以试试这个

根据您的更新,您可以实现这一点

 private  async void button1_Click(object sender, EventArgs e)
        {
            await lookingAsync();
        }

        public async Task lookingAsync()
        {
            string[] stringArray = { "Ali", "Hasan", "Morad", "Javad" };

            foreach (var item in stringArray)
            {

                    label1.Text = item;
                  await  Task.Delay(1000);                                 
            }
            string[] stringArray2 = { "Ali2", "Hasan2", "Morad2", "Javad2", "Mahmood", "Shaparak" };
            foreach (var item in stringArray2)
            {

                label1.Text = item;
                await Task.Delay(1000);
            }
              //if you want it in  a loop just uncomment this 
            // await lookingAsync();
        }

a()
b()
之间的唯一区别是对
backgroundWorker1\u-DoWork
函数的输入。为什么不能在同一个函数中传递所有输入,比如说,
a()
?无论出于何种原因,您都可以创建两个独立的
BackgroundWorker
线程。那么,如何创建一个windowsForm,在标签中逐个显示我的第一个字符串[]元素,以及在完成后重新开始并显示我的第二个字符串[]同一标签中的元素?@MuhammadEhsanMirzaei您需要什么exactly@MuhammadEhsanMirzaei看看我更新的答案按字面意思看,最小的变化是为
RunWorkerCompleted
事件添加一个处理程序,并在该处理程序中调用
b()
。其他方法包括将
DoWork
处理程序更改为以两个数组作为输入的方法,将当前
DoWork
代码移动到以单个数组作为输入的不同方法中,并让第一个方法调用第二个方法,或者移动到纯
异步
/
等待
实现(但不是下面贴的……那个例子不太好)。