Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态方法相互调用c时出现问题#_C#_Static Methods - Fatal编程技术网

C# 静态方法相互调用c时出现问题#

C# 静态方法相互调用c时出现问题#,c#,static-methods,C#,Static Methods,我正在尝试替换应用程序中的所有MessageBox.Show调用,因此我创建了一个静态MsgBox类,其中定义了以下两个方法: (一) 这个叫另一个 (二) 所以问题是如果我直接给第一个打电话,没问题,一切都正常。但如果我叫第二个,什么都不会发生 关于这一切是如何工作的,有什么我不了解的吗?Show重载方法用于显示您想要的任何类型的MessageBox。 您正在返回一个未应用于任何MessageBox的.Show,因此需要获取此返回值,并像使用MessageBox.Show(whateverRe

我正在尝试替换应用程序中的所有MessageBox.Show调用,因此我创建了一个静态MsgBox类,其中定义了以下两个方法:

(一)

这个叫另一个

(二)

所以问题是如果我直接给第一个打电话,没问题,一切都正常。但如果我叫第二个,什么都不会发生


关于这一切是如何工作的,有什么我不了解的吗?

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);