我如何向用户显示等待/忙碌游标(通常是沙漏),让他们知道程序正在做什么?
当前回答
我的方法是在后台工作程序中进行所有的计算。
然后像这样改变光标:
this.Cursor = Cursors.Wait;
并且在线程的finish事件中恢复游标:
this.Cursor = Cursors.Default;
注意,这也可以用于特定的控件,所以只有当鼠标在沙漏上方时,光标才会是沙漏。
其他回答
好的,其他人的观点很清楚,但我想补充一些,如下:
Cursor tempCursor = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
//do Time-consuming Operations
Cursor.Current = tempCursor;
在窗体或窗口级别使用UseWaitCursor更容易。 一个典型的用例如下所示:
private void button1_Click(object sender, EventArgs e)
{
try
{
this.Enabled = false;//optional, better target a panel or specific controls
this.UseWaitCursor = true;//from the Form/Window instance
Application.DoEvents();//messages pumped to update controls
//execute a lengthy blocking operation here,
//bla bla ....
}
finally
{
this.Enabled = true;//optional
this.UseWaitCursor = false;
}
}
为了获得更好的UI体验,你应该在不同的线程中使用异步。
实际上,
Cursor.Current = Cursors.WaitCursor;
临时设置等待游标,但不确保等待游标直到操作结束才显示。程序中的其他程序或控件可以很容易地将光标重置回默认箭头,就像在操作仍在运行时移动鼠标一样。
一个更好的显示等待游标的方法是在表单中设置UseWaitCursor属性为true:
form.UseWaitCursor = true;
这将显示窗体上所有控件的等待游标,直到将此属性设置为false。 如果你想等待光标显示在应用程序级别,你应该使用:
Application.UseWaitCursor = true;
你可以使用:
Mouse.OverrideCursor = Cursors.Wait;
&&
Mouse.OverrideCursor = Cursors.Arrow;
我的方法是在后台工作程序中进行所有的计算。
然后像这样改变光标:
this.Cursor = Cursors.Wait;
并且在线程的finish事件中恢复游标:
this.Cursor = Cursors.Default;
注意,这也可以用于特定的控件,所以只有当鼠标在沙漏上方时,光标才会是沙漏。
推荐文章
- 为什么Visual Studio 2015/2017/2019测试运行器没有发现我的xUnit v2测试
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 没有ListBox。SelectionMode="None",是否有其他方法禁用列表框中的选择?
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何在iis7应用程序池中设置。net Framework 4.5版本
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?