2

程序:当屏幕上出现 MessageBox.Show 时,用户锁定手机或按下开始按钮,然后返回应用程序

当执行上述程序时,您将永远不会看到在您开始上述程序之前出现的消息框,而是手机将选择默认值,即使在 OK Cancel 选项中也是 OK。会是什么情况,我将如何解决?

4

2 回答 2

1

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>
于 2013-10-10T13:28:56.447 回答
1

我认为避免这个问题的唯一方法是创建自己的弹出视图作为消息框。

于 2015-09-23T05:52:34.880 回答