程序:当屏幕上出现 MessageBox.Show 时,用户锁定手机或按下开始按钮,然后返回应用程序
当执行上述程序时,您将永远不会看到在您开始上述程序之前出现的消息框,而是手机将选择默认值,即使在 OK Cancel 选项中也是 OK。会是什么情况,我将如何解决?
程序:当屏幕上出现 MessageBox.Show 时,用户锁定手机或按下开始按钮,然后返回应用程序
当执行上述程序时,您将永远不会看到在您开始上述程序之前出现的消息框,而是手机将选择默认值,即使在 OK Cancel 选项中也是 OK。会是什么情况,我将如何解决?
MessageBox 在打开时抑制主应用程序线程,当您按下应用程序的锁屏按钮时,每个活动线程都会进入后台。主活动应用程序线程被激活,内部生成的消息框线程没有。
VisualTreeHelper.GetOpenPopups(); 是您可以检查所有打开的弹出窗口的方式。但最好和最一致的解决方案是使用自定义弹出窗口,用 xaml 制作的消息框。它们永远不会作为阻塞主 UI 线程的单独线程出现。
像这样的自定义用户控件可能会有所帮助
<Border Name="bdrLeave" Visibility="Collapsed">
<Border.Background>
<ImageBrush Stretch="Fill" ImageSource="/Images/LoderBackground.png"/>
</Border.Background>
<StackPanel>
<StackPanel>
<StackPanel.Background>
<ImageBrush Stretch="Fill" ImageSource="/Images/Backgrounds/Main_BG.jpg"/>
</StackPanel.Background>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<TextBlock Text="Heading" HorizontalAlignment="Center" Foreground="#FF001C68" FontWeight="Bold" Margin="0,20,150,0"/>
<Button content="Close"/>
</StackPanel>
<TextBlock Text="Message" TextWrapping="Wrap" HorizontalAlignment="Center" Foreground="#FF001C68" Margin="0,20,0,0"/>
<StackPanel Margin="0,20,0,20" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Content" Width="130"/>
<Button Content="Content" width "130"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Border>
我认为避免这个问题的唯一方法是创建自己的弹出视图作为消息框。