gpt4 book ai didi

c# - UI 中等待任务的问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:54 25 4
gpt4 key购买 nike

以下方法在我的 WPF 应用程序后面的 MainWindow 代码中运行,产生了一个有据可查的 StackOverflow 错误:

        async void LDAPLookupButton_Click(object sender, RoutedEventArgs e)
{
input = LDAPInputFileLocationTextBox_Value.Text;

LDAPProgress.Visibility = Visibility.Visible;
await Task.Run(() => LDAPLookups.ExportToCSV(input));
LDAPProgress.Visibility = Visibility.Hidden;
}

这会导致错误:

The calling thread must be STA, because many UI components require this.

根据推荐的指南调整方法允许应用程序运行,但正如预期的那样,在执行 Dispatcher 操作期间 UI 被阻止:

            async void LDAPLookupButton_Click(object sender, RoutedEventArgs e)
{
input = LDAPInputFileLocationTextBox_Value.Text;

LDAPProgress.Visibility = Visibility.Visible;

Dispatcher.Invoke(() =>
{
LDAPLookups.ExportToCSV(input);
});

LDAPProgress.Visibility = Visibility.Hidden;
}

此时我有两个问题:

  1. LDAPLookups.ExportToCSV 方法未对 UI 进行更新时,为什么会调用“调用线程必须是 STA...”错误?该方法用完了另一个类,并在本地计算机上简单地创建了一个 .csv。

  2. 如何在不阻塞 UI 的情况下让它运行?

最佳答案

上述问题下的评论摘要


我看到此错误发生的唯一原因是 ExportToCSV(请记住它现在正在 工作线程 中运行并且工作线程可能无法直接访问 UI ) 正在访问 UI。是吗?

此外,使用 Dispatcher.Invoke* 对于 async/await 来说有点毫无意义,尤其是当您已经在 UI 回调中时。

一定要检查相关代码。

关于c# - UI 中等待任务的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55057014/

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