为两个函数依次调用backgroundWorker1.RunWorkerAsync()函数c#windowsform
我想为两个函数逐个调用backgroundWorker1.RunWorkerAsync()函数,但出现以下错误: “此BackgroundWorker当前正忙,无法同时运行多个任务。” 我知道有什么问题。有没有办法做到这一点?这是我想做的一个例子,事实上有很多字符串和函数,一个接一个 如果无法创建windowsForm以在标签中逐个显示我的第一个字符串[]元素,以及在完成后重新开始并在同一标签中显示我的第二个字符串[]元素,该如何创建为两个函数依次调用backgroundWorker1.RunWorkerAsync()函数c#windowsform,c#,backgroundworker,windows-forms-designer,C#,Backgroundworker,Windows Forms Designer,我想为两个函数逐个调用backgroundWorker1.RunWorkerAsync()函数,但出现以下错误: “此BackgroundWorker当前正忙,无法同时运行多个任务。” 我知道有什么问题。有没有办法做到这一点?这是我想做的一个例子,事实上有很多字符串和函数,一个接一个 如果无法创建windowsForm以在标签中逐个显示我的第一个字符串[]元素,以及在完成后重新开始并在同一标签中显示我的第二个字符串[]元素,该如何创建 public Form1() { Initialize
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
代码移动到以单个数组作为输入的不同方法中,并让第一个方法调用第二个方法,或者移动到纯异步/等待实现(但不是下面贴的……那个例子不太好)。