如果主UI线程花费的时间太长,则窗口启动"没有响应"。这不是一个问题 - 实际上,它实际上有几个优点,例如使UI不响应,并且有效地"缓存"在长操作完成之后输入。
但是,此状态会停止Refresh()函数的工作。状态消息,进度条等停止更新。澄清一下,这不仅仅是长时间操作本身造成的。我可以坐下来观看长时间的操作(大约需要一分钟),这一切都完美无缺。 UI正确刷新,一切都很好。
但是,如果我左键单击标题栏,比如说,这会触发"没有响应"状态,由于某种原因阻止任何刷新重新绘制(它们仍被调用)。
将长操作放入BackgroundWorker线程将向前迈出一步,退步三步。我可以使用进度条而不是更新等,但如果正确更新它会非常好,即使在没有响应时也是如此。
鉴于"挂" UI非常乐意在长时间操作期间更新/刷新/重新绘制UI,当然有一种方法可以让它继续这样做,即使设置为"没有响应"?
另外,调用Application.DoEvents()有许多缺点(就像处理消息时应该缓存一样),所以我也不能这样做。
答案 0 :(得分:1)
最好把它移到一个单独的线程。尽管这种行为并非毫无根据,但我怀疑这种解决方案的可维护性最终会迫使人们重新思考。
你可以获得所有的好处'只需在UI顶部显示一个面板即可阻止对所有功能的访问。在此面板上,您可以显示进度条和状态消息,这样用户就不会太害怕。
我认为现在提供更优质的解决方案是值得的。