是的,是的。我知道它们是两种完全不同的技术。我最近从网络开发转到了用C#和Windows窗体进行FAT开发。我一直认为使用ajaxStart和ajaxStop显示微调器非常容易,这样用户就知道发生了什么并继续等待。
对于C#Windows窗体,是否有一种可以全局实现的简单技术?例如,如果我正在查询数据库并等待一些结果,通常程序会在几秒钟内变得没有响应,然后在"处理"后重新开始工作。当我的程序"处理"时,是否有一些全局方法可以显示微调器,而不是识别程序中可能导致它变得无响应并剥离新线程的所有点?
如果我不清楚,请告诉我。
实现这一点的标准Windows窗体方法是Cursor.Current = Cursors.WaitCursor;
。
这对你有用吗,还是必须是一个图像?
我使用的是Visual Studio Enterprise 2015。这里给出的建议的光标样式/类型,没有一个适用于我。
与我合作的是:
private async void button_Click(object sender, RoutedEventArgs e)
{
Cursor = Cursors.WaitCursor; // change cursor to hourglass type
ThatProcessThatTookVeryLongTime();
Cursor = Cursors.Arrow; // change cursor to normal type
}
当我需要等待光标时,这是我喜欢使用的方式;而不是编写tryfinally代码。
#region WaitCursor
public static IDisposable BeginWaitCursorBlock()
{
return ((!_waitCursorIsActive) ? (IDisposable)new waitCursor() : null);
}
private static bool _waitCursorIsActive;
private class waitCursor : IDisposable
{
private Cursor oldCur;
public waitCursor()
{
_waitCursorIsActive = true;
oldCur = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
}
public void Dispose()
{
Cursor.Current = oldCur;
_waitCursorIsActive = false;
}
}
#endregion
示例用法:
using (BeginWaitCursorBlock())
{
...
}
我可以添加此CodeProject链接吗?
您所需要的只是构建、从工具栏拖动并使用。LoadingCircle
组件工作时没有任何问题。工作就像一个魅力,你甚至可以自定义它!
如果你的程序没有响应,那是因为你在UI线程上做真正的工作。将工作移到后台线程,根据需要禁用UI交互,以防止用户在工作时触摸东西,然后当后台工作完成时,使用Control.Invoke将结果发回UI线程,然后用结果更新UI,然后重新启用所有内容。
为了实现微调器,我使用了一个带有微调器gif的PictureBox。我在UI空闲时禁用它,在启动后台工作程序时启用它。
另一种选择是将鼠标光标更改为"等待"光标,我不太喜欢它。
处理前:Cursor.Current=Cursors.WaitCursor;
ProcessesSomething();
处理后:Cursor.Current=Cursors.AppStarting;
自.NET 4.5(VS 2015+)以来,您可以使用async和wait with Progress的组合向UI线程发送更新:
单击打开相关文章
是的。
简单的方法是制作两种实用方法,一种用于启用"加载"指示器,另一种用于禁用该加载状态。
在所有初始ajax调用(或任何其他长调用)后,自动调用enable方法。
一旦触发oncomplete回调,就从oncomplete回调中调用disable方法。
另一种方法是由后台工作人员或线程在运行动画时完成该工作,在Forms/main线程中等待光标或/和显示加载程序GIF。