System.Windows.MessageBox在输入噗之前不等待用户输入!...这没有任何意义。TT在我的Application_Startup事件处理程序中,我的代码看起来有点像这样:privatevoidApplication_Startup(objectsender,StartupEventArgse){stringerrorMessage;if(CheckStartUpConditions(outerrorMessage)){(newMainWindow()).Show();}else{MessageBox.Show(errorMessage,"应用程序启动",MessageBoxButton.OK,MessageBoxImage.Error);关闭();}}privateboolCheckStartUpConditions(outstringerrorMessage){errorMessage=string.Empty;if(...)errorMessage+="请登录xxx。";if(...)errorMessage+="请安装xxx。";如果(字符串。IsNullOrEmpty(errorMessage))返回真;否则返回假;POOF!”,一个消息框短暂出现。它不等我点击“确定”或“X”按钮。我真的很困惑为什么会这样,所以任何帮助将不胜感激。我我已经尝试过注释掉对Shutdown的调用以开玩笑,但它的行为方式仍然相同。此外,该应用程序有一个SplashScreen,所以我不知道这是否会影响这一点。编辑:我添加了更多代码,如果它帮助。消息框显示正确的错误消息。它不会停留足够长的时间供用户阅读。>?编辑第2部分:好的......我想我找到了罪魁祸首。:(我更改了我正在使用的图像上的构建操作,因为我从SplashScreen到我的启动到无,消息框现在将保留并等待用户输入。我不明白为什么SplashScreen搞砸了MessageBox。>:(尝试使用接受System.Windows.Window参数的重载并传递Null值以使MessageBox成为应用程序的顶级窗口,独立于可能存在的所有其他窗口。我猜你的MessageBox是拥有的通过闪屏形式。当关闭闪屏时,框架关闭MessageBox。所以让你的MessageBox无主应该可以解决问题。根据AlexeyIvanov的建议,我设法使用一个新窗口作为父System.Windows.Forms.MessageBox.Show(newSystem.Windows.Forms.NativeWindow(),errorMessage,"ApplicationStartup",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);消息框立即消失,因为它没有所有者。如果指定选项MessageBoxOptions.DefaultDesktopOnly,桌面将被指定为所有者,消息框将在没有主窗口的应用程序上正常工作。MessageBox.Show("消息","标题",MessageBoxButton.YesNoCancel,MessageBoxImage.Question,MessageBoxResult.Cancel,MessageBoxOptions.DefaultDesktopOnly);创建一个透明的隐藏窗口并将其用作MessageBox的所有者:privateWindowCreateHiddenWindow(){varwindow=newWindow{AllowsTransparency=true,Background=System.Windows.Media.Brushes.Transparent,WindowStyle=WindowStyle.None,Top=0,左=0,宽度=1,高度=1,ShowInTaskbar=false};窗户。展示();返回窗口;如果您在代码中实现启动画面而不是图像构建操作,则可以保留启动画面并使用标准WPFMessageBox。App.xaml.cs:varsplashScreen=newSplashScreen("path/to/splash_image.bmp");splashScreen.Show(假);//确保在此处使用“false”以防止自动关闭字符串errorMessage;if(CheckStartUpConditions(outerrorMessage)){(newMainWindow()).Show();}else{//现在可以在这里使用标准WPFMessageBoxMessageBox.Show(errorMessage,"ApplicationStartup",MessageBoxButton.OK,MessageBoxImage.Error);Shutdown();}//现在显式关闭启动画面splashScreen.Close(TimeSpan.FromSeconds(1));Alexey是对的,启动画面关闭了消息框。避免这种情况的一种简单方法是使用本机MessageBox函数:[DllImport("user32.dll",CharSet=CharSet.Unicode)]publicstaticexternintMessageBox(IntPtrhWnd,Stringtext,Stringcaption,uinttype);publicstaticvoidMain(){...MessageBox(newIntPtr(0),"HelloWorld!","MyApp",0);您需要告诉WPF不要关闭第一个窗口。检查一下:http://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode.aspx。您希望将应用程序设置为显式关闭(而不是在第一个窗口关闭后):您的另一个选择是将MainWindow设置为StartupUri(而不是启动画面)并在MainWindow加载事件中加载启动画面。然后您将执行您需要执行的任何加载或时间密集型操作,隐藏您的初始屏幕,并重新显示您的主窗口。以上就是C#学习教程:System.Windows.MessageBox在输入之前不等待用户输入噗!如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
