我有几个任务并行运行同一个方法。对于这个方法的一个特定部分。我希望任务一个接一个地进行(不是并行的)。
背景:在特定的部分中,我打开了另一个表单,用户在其中输入密码。我不希望用户为每一个任务输入密码。第一个密码应该保存在一个全局字符串中,并由其他任务使用。
private void S7_GetCPU()
{
//Some Stuff
if (CPUPassword != null)
{
EncryptedString pwd = new EncryptedString(CPUPassword);
this.CPU.SetPassword(pwd);
}
if (!this.CPU.PasswordValid)
{
CPUPassword = ((MainForm)mainform)
.ShowInputMessage("Enter Password for CPU"), true);
EncryptedString pwd = new EncryptedString(CPUPassword);
this.CPU.SetPassword(pwd);
}
//More Parallel-Stuff
}
我试着把这个部分放到一个Invoke中。Input-Message只打开一次。但是所有其他的任务都冻结在那一点上,甚至在第一个任务离开.invoke之后
private void S7_GetCPU()
{
//Some Stuff
this.Invoke(new System.Action(() =>
{
if (CPUPassword != null)
{
EncryptedString pwd = new EncryptedString(CPUPassword);
this.CPU.SetPassword(pwd);
}
if (!this.CPU.PasswordValid)
{
CPUPassword = ((MainForm)mainform)
.ShowInputMessage("Enter Password for CPU"), true);
EncryptedString pwd = new EncryptedString(CPUPassword);
this.CPU.SetPassword(pwd);
}
}));
//More Parallel-Stuff
}
1条答案
按热度按时间fwzugrvs1#
解决方法:lock