我有一个大型项目,我正在使用 C# 进行开发,C# 是一种我相当陌生的语言。该项目严重依赖 GUI,并且显示了大量数据。最近,我们在以前从未出现过的地方遇到了跨线程错误。这些发生的错误很容易解决:
if (logListView.InvokeRequired)
{
logListView.BeginInvoke(new MethodInvoker(
() => logListView.Items[logListView.Items.Count - 1].EnsureVisible()));
}
else
{
logListView.Items[logListView.Items.Count - 1].EnsureVisible();
}
然而,我的问题是:每次访问 Windows 窗体对象时都需要应用该方法吗?有特殊情况吗?我没有使用多线程,所以据我所知,这些错误发生在我的控制之外。例如,我无法控制哪段代码由哪个线程执行:C# 自己完成所有这些工作(我不太了解该语言)。为修改 GUI 的每一行实现一个 if 语句似乎非常令人讨厌。