C# 静态方法相互调用c时出现问题#
我正在尝试替换应用程序中的所有MessageBox.Show调用,因此我创建了一个静态MsgBox类,其中定义了以下两个方法: (一) 这个叫另一个 (二) 所以问题是如果我直接给第一个打电话,没问题,一切都正常。但如果我叫第二个,什么都不会发生C# 静态方法相互调用c时出现问题#,c#,static-methods,C#,Static Methods,我正在尝试替换应用程序中的所有MessageBox.Show调用,因此我创建了一个静态MsgBox类,其中定义了以下两个方法: (一) 这个叫另一个 (二) 所以问题是如果我直接给第一个打电话,没问题,一切都正常。但如果我叫第二个,什么都不会发生 关于这一切是如何工作的,有什么我不了解的吗?Show重载方法用于显示您想要的任何类型的MessageBox。 您正在返回一个未应用于任何MessageBox的.Show,因此需要获取此返回值,并像使用MessageBox.Show(whateverRe
关于这一切是如何工作的,有什么我不了解的吗?Show重载方法用于显示您想要的任何类型的MessageBox。
您正在返回一个未应用于任何MessageBox的.Show,因此需要获取此返回值,并像使用
MessageBox.Show(whateverReturned)
那样使用.Show重载方法来显示所需的任何类型的MessageBox。
您正在返回一个未应用于任何MessageBox的.Show,因此您需要获取此返回值并像使用
MessageBox.Show(whateverReturned)
一样使用它。答案似乎是我试图从不允许的后台线程获取主窗口
我已将第二个方法代码更改为:
Window mainWindow = null;
UiDispatcher.Invoke(delegate { mainWindow = Application.Current.MainWindow; }, DispatcherPriority.Normal);
return Show(mainWindow, messageBoxText, caption, button, icon, defaultResult);
再次感谢@Dan和@Crissinclair带我走过这段路 答案似乎是我试图从一个不允许的后台线程获取主窗口 我已将第二个方法代码更改为:
Window mainWindow = null;
UiDispatcher.Invoke(delegate { mainWindow = Application.Current.MainWindow; }, DispatcherPriority.Normal);
return Show(mainWindow, messageBoxText, caption, button, icon, defaultResult);
再次感谢@Dan和@Crissinclair带我走过这段路 你怎么称呼第二个?编辑:和第一个.MsgBox.Show(“Message”、“Title”、MessageBoxButton.OK、MessageBoxImage.Information”);对不起,斯金纳,你怎么称呼第一个呢?另外,你能在一个新的/空白的项目中复制这个吗?(如果是这样,请为我们提供代码,以便我们自己复制它。)它是否可以从静态上下文引用Application.Current?您可以尝试将#2设为非静态以进行测试。@Skinner927:您没有将方法正文发布到第一个
Show
方法,但我猜它本质上是return MessageBox.Show(所有者、messageBoxText、标题、按钮、图标、defaultResult)代码>?您如何调用第二个?编辑:和第一个.MsgBox.Show(“Message”、“Title”、MessageBoxButton.OK、MessageBoxImage.Information”);对不起,斯金纳,你怎么称呼第一个呢?另外,你能在一个新的/空白的项目中复制这个吗?(如果是这样,请为我们提供代码,以便我们自己复制它。)它是否可以从静态上下文引用Application.Current?您可以尝试将#2设为非静态以进行测试。@Skinner927:您没有将方法正文发布到第一个Show
方法,但我猜它本质上是return MessageBox.Show(所有者、messageBoxText、标题、按钮、图标、defaultResult)代码>?我读了这个答案,觉得可能被误解了(不清楚)。但是——换句话说,第二个方法需要调用MessageBox.Show
,第一个方法需要调用Show()
。在上面的代码中,没有任何地方调用过MessageBox.Show()
。反之亦然-您没有包括第一个示例的方法体。谢谢Steve!:)新来的家伙!困难的部分是将答案从我的头脑中转化为实际的文字,但是的,我认为困惑在于认为可以添加一些新代码并自动调用它。我从未调用MessageBox.show anywhere,这个类正在尝试替换它。我读了这个答案,觉得它可能被误解(不清楚)。但是——换句话说,第二个方法需要调用MessageBox.Show
,第一个方法需要调用Show()
。在上面的代码中,没有任何地方调用过MessageBox.Show()
。反之亦然-您没有包括第一个示例的方法体。谢谢Steve!:)新来的家伙!困难的部分是将答案从我的头脑中转化为实际的文字,但是的,我认为困惑在于认为可以添加一些新代码,并且它会被自动调用。我从未调用MessageBox.show anywhere,这个类正在尝试替换它。
Window mainWindow = null;
UiDispatcher.Invoke(delegate { mainWindow = Application.Current.MainWindow; }, DispatcherPriority.Normal);
return Show(mainWindow, messageBoxText, caption, button, icon, defaultResult);