使用异步/等待,UI设置内容后冻结

时间:2012-12-13 14:22:12

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

遇到了一些问题而且无法理解它出现的原因。 我正在使用.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); });
    }

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

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

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

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