【发布时间】: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