用户确认关机后,我的应用程序需要将近4秒才能完全关闭。我试图在3秒内向用户展示一些活动并可能取得进展。因此场景类似于
ButtonClose_Click() - >你确定要离开? - >是的 - > "关闭"
我试图只显示一个窗口(消息框),但我使用的是DevExpress窗口,它们是OkCancel
,Ok
,YesNo
和YesNoCancel
所以基本上它需要要继续的用户输入:
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);
}
我怎么能接近这个?
答案 0 :(得分:1)
您可以使用WPF Toolkit Busy Indicator:
https://wpftoolkit.codeplex.com/wikipage?title=BusyIndicator&referringTitle=Home
使用指示器包装控件,然后在长时间运行的过程中将绑定标志设置为True。
答案 1 :(得分:1)
这是一个简单繁忙的指标,我已经使用了几次。您只需要在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>
答案 2 :(得分:1)
我使用MahApps.Metro的ProgressRing。
http://mahapps.com/controls/progress-ring.html
代码是开源的,或者您可以使用Nuget获取二进制文件。