为什么沙漏(WaitCursor)会停止旋转?

B. *_*non 5 c# winforms hourglass

我点击按钮就有代码:

try
{
    Cursor = Cursors.WaitCursor;
    GenerateReports();
}
finally
{
    Cursor = Cursors.Default;
    GC.Collect();
    GenPacketBtn.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)

除了finally块之外的其他任何地方都没有将光标设置回默认值,但它确实"累了"并因某种原因恢复到默认状态.为什么会这样,我怎么能保证它不会停止"等待"直到所有进程的大爸爸(GenerateReports())完成?

Ahm*_*mad 3

改用Control.UseWaitCursor = true,这样就不会超时。

如果正在执行一个昂贵的操作,那么 Windows 将接管并将其更改Cursor.WaitCursor为它认为必要的任何内容。因此,对于 Cursor.WaitCursor ,它要么是由于超时(但不能完全确定这一点),要么是因为 Windows 简单地声明了光标的所有权,而不考虑其之前的状态。我们也遇到过类似的情况,即在执行涉及第三方 PDF 转换器的昂贵任务时,光标没有按预期运行,但我们没有对问题的性质进行更多调查,因为它不是优先事项。

经过一番阅读后,发现设置沙漏光标比看起来要复杂一些:

.net WaitCursor:显示沙漏有多难?

另外作为旁注:您应该使用Cursor.Current = Cursors.WaitCursor,因为这会强制光标立即更改为忙碌,更多详细信息位于:https ://stackoverflow.com/a/302865/1463733