C# 如何代表;“装载”;在GUI中

C# 如何代表;“装载”;在GUI中,c#,wpf,C#,Wpf,在用户确认关闭后,我的应用程序几乎需要4秒钟才能完全关闭。我试图在这3秒内向用户展示一些活动和可能的进展。因此,这种情况类似于 按钮关闭单击()->确实要退出吗?->是-> “结束” 我试图只显示一个窗口(messagebox),但我使用的是DevXPress窗口,它们是OkCancel、Ok、YesNo和YesCancel,因此基本上需要用户输入才能继续: Application.Current.Dispatcher.Invoke( () => { DXM

在用户确认关闭后,我的应用程序几乎需要4秒钟才能完全关闭。我试图在这3秒内向用户展示一些活动和可能的进展。因此,这种情况类似于

按钮关闭单击()->确实要退出吗?->是-> “结束”

我试图只显示一个窗口(messagebox),但我使用的是DevXPress窗口,它们是
OkCancel
Ok
YesNo
YesCancel
,因此基本上需要用户输入才能继续:

Application.Current.Dispatcher.Invoke(
    () =>
    {
        DXMessageBox.Show(Application.Current.MainWindow,
        "Text Here..", "Title Here.. ", MessageBoxButton.OKCancel, MessageBoxImage.Information); // Ok by Default
    });
这就是我所拥有的:

var result = DXMessageBox.Show(Application.Current.MainWindow,
    "Are you sure you want to EXIT the application?",
    "Attention", MessageBoxButton.OKCancel, MessageBoxImage.);

if (result == MessageBoxResult.OK)
{
    //         
    // I want to show or display some "loading" activity here till the below code finishes executing"
    // 

    mainViewModel.SaveDatabase(); // save database+
    mainViewModel.CaptureViewModel.cameraController.TurnCameraLights(false, false, false); // turn off some lights
    mainViewModel.CaptureViewModel.Uninitialize(); // clear stuff
    Environment.Exit(0);
}

我怎样才能做到这一点呢?

您可以使用WPF工具箱繁忙指示器:


使用指示器包装控件,然后在长时间运行的进程期间将绑定标志设置为True。

您可以使用WPF Toolkit忙碌指示器:


用指示器包装控件,然后在长时间运行的进程期间将绑定标志设置为True。

这里是一个简单的繁忙指示器,我已经使用过几次。您只需要在viewmodel中设置一个属性IsBusy。只需将其放在其余控件的顶部

最好的是,当您在设计视图中编辑时,它不会显示在您的控件上

        <Grid>
        <!--all of your controls-->

            <!--Loading Indicator-->
            <Border x:Name="_LoadingIndicator" Background="#AA000000">
                <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red" FontSize="80">Loading...</TextBlock>
                <Border.Style>
                    <Style TargetType="Border">
                        <Setter Property="Visibility" Value="Collapsed"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=IsBusy}" Value="True">
                                <Setter Property="Visibility" Value="Visible"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
            </Border>
        </Grid>

加载。。。
下面是它的外观:

这是一个简单的忙指示器,我已经用过几次了。您只需要在viewmodel中设置一个属性IsBusy。只需将其放在其余控件的顶部

最好的是,当您在设计视图中编辑时,它不会显示在您的控件上

        <Grid>
        <!--all of your controls-->

            <!--Loading Indicator-->
            <Border x:Name="_LoadingIndicator" Background="#AA000000">
                <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Red" FontSize="80">Loading...</TextBlock>
                <Border.Style>
                    <Style TargetType="Border">
                        <Setter Property="Visibility" Value="Collapsed"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=IsBusy}" Value="True">
                                <Setter Property="Visibility" Value="Visible"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Border.Style>
            </Border>
        </Grid>

加载。。。
下面是它的外观:

我使用MahApps.Metro中的ProgressRing


代码是开源的,或者您可以使用Nuget获取二进制文件。

我使用MahApps.Metro中的ProgressRing


代码是开源的,或者您可以使用Nuget获取二进制文件。

标准忙碌光标有什么问题?@Cody这是个好主意,但没有鼠标。这是一个触摸应用程序,用于桌面。标准忙碌光标有什么问题?@Cody这是个好主意,但没有鼠标。这是一个触摸应用程序,在桌面上使用。我试过了,可以作为应用程序关闭的指示。但如果我有几个观点呢?我需要在每个xaml和viewModel上添加它,对吗?您需要将它添加到任何要显示“加载…”指示器的窗口中。我打赌你可能会在默认情况下创建一个具有该属性的控件…我尝试过,可以将其用作应用程序正在关闭的指示。但如果我有几个观点呢?我需要在每个xaml和viewModel上添加它,对吗?您需要将它添加到任何要显示“加载…”指示器的窗口中。我打赌你可能会创建一个默认具有该属性的控件。。。