【问题标题】:Using async / wait, UI Freezes after setting content使用异步/等待,设置内容后 UI 冻结
【发布时间】:2012-12-13 22:30:30
【问题描述】:

遇到了一些问题,不明白为什么会出现。 我正在使用 .net 4.5 / C# 并尝试在异步函数成功后将 Content 设置为 ContentControl。 我想在程序的那一部分中做的主要重点是在自己的 WPF 加载动画(Usercontrol IsLoading)和 PDF 内容(Usercontrol PDFDokument)之间切换。 PDF 是在“PDFDokument”内部加载和呈现的,并且运行良好。 如果需要更多信息,欢迎提出任何问题。 为了让你知道,我会说我仍处于发展的初级阶段。 (三年中的第一年:))

    public ucPDFDocument PDFDokument = new ucPDFDocument();
    public ucLoading IsLoading = new ucLoading();

    protected async void lstSuchergebnis_DoubleClickItem(object sender, MouseButtonEventArgs e)
    {
        var tempAkte = ((ListViewItem)sender).Content as Akten;

        tbctrlResultPanel.SelectedIndex = 1;
        PDFDokument.IsDataChangeAllowed(false);
        contSwapControls.Content = IsLoading;

        await PDF(tempAkte);
        contSwapControls.Content = PDFDokument; **<-- after executing this line, the ui freezes**
    }

    private Task PDF(Akten paramAkte)
    {
        Akten _tempAkte = paramAkte;
        return Task.Run(() => { PDFDokument.LoadPDFDokument(_tempAkte.akt_ID, ref _DaKsManger); });
    }

我尝试了使用异步加载的不同方式,但没有解决这个问题。

希望有人知道如何解决这个问题:)

非常感谢!!!

【问题讨论】:

  • 如果您在调试器冻结时暂停调试器,您会看到什么调用堆栈?
  • 为了获取调用堆栈,我插入了一个堆栈跟踪和堆栈帧对象以在 foreach 循环中使用堆栈帧.getmethod().name。如果我恰好在循环之后暂停调试器,那么我会得到一个很长的调用堆栈列表,说 MoveNext InvokeMoveNext RunInternal Run Run <.cctor>b__3 InternalRealCall ...... Main _nExecuteAssembly nExecuteAssembly Run ExecuteAsAssembly CreateInstance CreateInstance CreateInstance CreateInstance RunUsersAssemblyDebugInZone ThreadStart_Context RunInternal Run运行 ThreadStart"
  • 当我恢复程序(或正常启动)时,它会因错误而退出,说 IOException “控制访问由另一个线程内置”(就像@Xtudio 在他的回答中所说,但今天是我第一次遇到这个异常)

标签: c# wpf asynchronous user-controls async-await


【解决方案1】:

唯一的异步是PDF(...),您正在等待。设置内容不是以异步方式执行的。您设置的内容发生在 UI 线程上。 (这是唯一的方法,因为您正在修改 UI,这只能在创建它的线程上发生)

【讨论】:

  • 嗯好的,所以我需要更改将内容设置为该控件的方式。昨天我有了一个关于使用事件或类似方式的想法。我尝试了一些方法来解决这个问题。
猜你喜欢
  • 2014-08-08
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多