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

时间:2015-12-09 19:53:28

标签: c# winforms hourglass

我按下按钮就有代码:

try
{
    Cursor = Cursors.WaitCursor;
    GenerateReports();
}
finally
{
    Cursor = Cursors.Default;
    GC.Collect();
    GenPacketBtn.Enabled = true;
}

在finally块中没有其他地方是光标设置回默认值,但它确实“累了”并由于某种原因恢复到默认状态。为什么会这样,我怎么能保证它不会停止“等待”直到所有进程的大爸爸(GenerateReports())完成?

1 个答案:

答案 0 :(得分:3)

改为使用Control.UseWaitCursor = true,这不会超时。

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

经过一番阅读后,结果表明设置沙漏光标比看起来要复杂一点:

.net WaitCursor: how hard can it be to show an hourglass?

另外作为旁注:您应该使用Cursor.Current = Cursors.WaitCursor,因为这会强制光标立即变为忙碌,更多详情请参阅:https://stackoverflow.com/a/302865/1463733