如何使光标转向等待光标?

我有一个C#应用程序,有用户登录到该应用程序,并且由于哈希算法昂贵,因此需要花费一些时间。如何向用户显示“等待/忙碌光标”(通常是沙漏),以使他们知道程序正在执行操作?

该项目在C#中。


SMILET
浏览 464回答 3
3回答

摇曳的蔷薇

您可以使用Cursor.Current。// Set cursor as hourglassCursor.Current = Cursors.WaitCursor;// Execute your time-intensive hashing code here...// Set cursor as default arrowCursor.Current = Cursors.Default;但是,如果散列操作确实很漫长(MSDN将其定义为超过2-7秒),则可能应使用光标以外的视觉反馈指示器来向用户通知进度。有关更深入的指导原则,请参阅本文。编辑:正如@Am指出的那样,您可能需要在Application.DoEvents();之后致电Cursor.Current = Cursors.WaitCursor;以确保沙漏实际上已显示。

当年话下

其实,Cursor.Current = Cursors.WaitCursor;临时设置“等待”光标,但不能确保在操作结束之前一直显示“等待”光标。实际上,当您在操作仍在运行时移动鼠标时,其他程序或程序中的控件可以轻松地将光标重置为默认箭头。显示“等待”光标的一种更好的方法是将窗体中的UseWaitCursor属性设置为true:form.UseWaitCursor = true;这将显示窗体上所有控件的等待光标,直到将此属性设置为false为止。如果要在应用程序级别上显示等待光标,则应使用:Application.UseWaitCursor = true;

有只小跳蛙

在前一个方法的基础上,我的首选方法(由于这是一个经常执行的操作)是将等待光标代码包装在IDisposable帮助器类中,以便它可以与using()(一行代码)一起使用,采用可选参数,运行其中的代码,然后清理(还原光标)。public class CursorWait : IDisposable{    public CursorWait(bool appStarting = false, bool applicationCursor = false)    {        // Wait        Cursor.Current = appStarting ? Cursors.AppStarting : Cursors.WaitCursor;        if (applicationCursor) Application.UseWaitCursor = true;    }    public void Dispose()    {        // Reset        Cursor.Current = Cursors.Default;        Application.UseWaitCursor = false;    }}用法:using (new CursorWait()){    // Perform some code that shows cursor}
打开App,查看更多内容
随时随地看视频慕课网APP