假设您永久地在 UI 线程/调度程序上异步调用一个方法
while (true) {
uiDispatcher.BeginInvoke(new Action<int, T>(insert_), DispatcherPriority.Normal, new object[] { });
}
在程序的每次运行中,您都会观察到应用程序的 GUI 在大约 90 秒后由于调用的泛滥而开始冻结(时间会有所不同,但大致在 1 到 2 分钟之间)。
怎样才能准确地确定(测量?)这种过载发生的时间点以便足够早地停止它?
附录一:
在我的实际程序中,我没有无限循环。我有一个算法在终止之前迭代数百次。在每次迭代中,我都在 WPF 应用程序的 List 控件中添加一个字符串。我使用了 while (true) { ... } 构造,因为它最符合发生的情况。事实上,算法正确终止,所有(数百个)字符串都正确添加到我的列表中,但一段时间后,我失去了使用我的 GUI 的能力,直到算法终止 - 然后 GUI 再次响应。
附录二:
我的程序的目的是在运行时观察一个特定的算法。我添加的字符串是日志条目:每次迭代一个日志字符串。我调用这些添加操作的原因是该算法在 UI 线程之外的另一个线程中运行。为了赶上我不能从除了 UI 线程之外的任何线程进行 UI 操作的事实,我构建了某种 ThreadSafeObservableCollection(但我很确定这段代码不值得发布,因为它会减损实际问题我认为是 UI 无法处理方法的重复和快速调用。