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