gpt4 book ai didi

c# - 任务中的 System.Windows.Forms.dll 中出现“System.InvalidOperationException”

转载 作者:行者123 更新时间:2023-11-30 17:13:44 30 4
gpt4 key购买 nike

我正在构建一个 Winform 应用程序,我想更新一个代表目录树的 TreeView。这个方法需要一两秒,所以我想并行运行它。

首先,我在下面的代码中使用了 Task.Factory.StartNew(),但我收到了错误 'System.InvalidOperationException' occurred in System.Windows.Forms.dll in Task .

Task loadTreeViewTask = Task.Factory.StartNew(() =>
{
try {
directoryTreeView.Nodes.Clear();
....
PopulateTreeView(directory, directoryTreeView.Nodes[0]);
}
catch (Exception e) {
//Log
//Change try/catch to CancellationToken
}
});

然后我看到 Windows 使用单线程 UI,我发现我需要使用 InvokeRequired:

directoryTreeView.Invoke((MethodInvoker)(() =>
{
try {
directoryTreeView.Nodes.Clear();
....
PopulateTreeView(directory, directoryTreeView.Nodes[0]);
}
catch (Exception e) {
//Log
//Change try/catch to CancellationToken
}
}));

有更好的方法吗?

最佳答案

您的代码的第一部分将无法运行,因为您正在尝试更新在 UI 线程上创建的控件,因此,是的,您将需要使用 Invoke 方法。您不能从另一个线程更新在 UI 线程上创建的 UI 控件。

关于c# - 任务中的 System.Windows.Forms.dll 中出现“System.InvalidOperationException”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522668/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com