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

本文关键字:旋转 沙漏 WaitCursor 为什么 | 更新日期: 2023-09-27 18:26:14

我有一个按钮点击中的代码,如下所示:

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

除了finally块之外,其他地方都没有将光标设置回默认状态,但由于某种原因,它确实"累了"并恢复到默认状态。为什么会出现这种情况,我如何保证它不会停止"等待",直到所有流程的"老爹"(GenerateReports())完成?

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

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

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

经过一点阅读,事实证明设置沙漏光标比看起来更复杂:

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

另请注意:您应该使用Cursor.Current = Cursors.WaitCursor,因为这会迫使光标立即变为忙碌,更多详细信息请访问:https://stackoverflow.com/a/302865/1463733