我有一个在线程池中执行的委托。计数作为变量正确传递,但是,当程序返回输出时,传入的初始值现在是更新后的版本。我如何修改这些变量以保持正确的值?线程安全,防止变量更新
private void SetControlText(TextBox TB, string txt)
{
if (TB.InvokeRequired)
{
Invoke((MethodInvoker)delegate
{
TB.AppendText(txt + "\n");
TB.Update();
});
return;
}
TB.Text = txt;
}
private void DoWork(OCAdapter.OCAdapter Adapter, OutputForm output, int c, object ThreadContext = null)
{
int count = c;
//output.AppendToOutput("Initializing Adapter: " + count + " Test\n");
SetControlText(output.OutputBx, "Initializing Adapter: " + count + " Test\n");
try
{
var Test = Adapter.GetBookmarks();
if (Test != null)
//output.AppendToOutput("Adapter: " + count + " is valid\n");
SetControlText(output.OutputBx, "Adapter: " + count + " is valid\n");
}
catch (Exception ex)
{
//output.AppendToOutput("Exception occured on adapter: " + count + " Exception: " + ex.Message);
SetControlText(output.OutputBx, "Exception occured on adapter: " + count + " Exception: " + ex.Message);
}
}
你怎么称呼DoWork? – JeffRSon 2013-05-07 20:45:09
我不确定要理解,也许需要更多一点的代码?如果你希望'DoWork'在另一个线程传递给''SetControlText'时不被另一个线程中断,那么你应该用'lock'声明来包围你的方法体:http://msdn.microsoft.com/en- us/library/c5kehkcz(v = vs.71).aspx虽然我不确定这是你的问题。 – 2013-05-07 21:12:07