【发布时间】:2011-05-25 05:38:28
【问题描述】:
完全重写了这个问题,因为我现在有更多关于正在发生的事情的信息。
我有一个 customtracelistener,它覆盖 writeline 方法以将字符串添加到自定义 observablecollection。该集合类将所有通知事件分派给 UI 线程,以允许其他线程对其进行更新,并且仍然允许 WPF 数据绑定。
我有一个包含列表框的用户控件。列表框将跟踪侦听器中的 observablecollection 绑定到它的 itemssource。
在我的应用程序启动中,我设置了 windows/usercontrols/viewmodels,并显示了窗口。然后我启动了一个工作线程,该线程运行应用程序所需的一些后端进程。如果后台线程在 UI 线程完成所有用户控件设置和数据绑定之前执行 Trace.WriteLine,我的应用程序就会死锁。
通过在 UI 线程中添加睡眠和其他随机长时间运行的任务和/或延迟启动工作线程以给 UI 线程时间来完成,我已经能够在某种程度上合理地证明这种竞争条件。
我现在正在考虑实施的解决方案是创建一个AppSetupCompleted 方法,该方法启动所有后端进程的工作线程,并将其发送到具有后台优先级的调度程序。理论上,这是否应该延迟工作线程,直到成功设置 WPF 控件和视图模型的所有绑定?
【问题讨论】:
-
开启捕获所有抛出的异常,看看会发生什么。
标签: c# wpf multithreading tracelistener