在 Windows 窗体程序正在"处理"时显示微调器,类似于 ajaxStart/ajaxStop?



是的,是的。我知道它们是两种完全不同的技术。我最近从网络开发转到了用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。

最新更新