什么会生成此错误“调用目标已引发异常”?
Posted
技术标签:
【中文标题】什么会生成此错误“调用目标已引发异常”?【英文标题】:What Generates This Error 'Exception has been thrown by the target of an invocation'? 【发布时间】:2014-08-22 10:56:07 【问题描述】:我正在开发一个 Windows Phone 8 APP,并且我在 Page Launch 上创建了一个弹出元素并用作静态变量弹出。
private void Application_Launching(object sender, LaunchingEventArgs e)
RemoveCurrentDeactivationSettings();
APPCommon.popupsetup();
//APPCOMMON Page
public static Popup busyindicator;
public static void popupsetup()
busyindicator = new Popup()
Child = new Border()
Child = new Telerik.Windows.Controls.RadBusyIndicator()
FontSize = 25,
IsRunning = true,
IsEnabled = true,
Content = "Processing...",
Foreground = new SolidColorBrush(Colors.White)
,
Opacity = 0.8,
Name = "busyindicate",
Background = new SolidColorBrush(Colors.Black),
Width = Application.Current.Host.Content.ActualWidth,
Height = Application.Current.Host.Content.ActualHeight
;
即使在重型模式下,它大部分时间也能正常工作。但是,当应用程序进入空闲模式(锁定屏幕或开始菜单)时,当我从开始菜单而不是使用返回键返回应用程序时,我在极少数情况下会收到错误消息,我收到错误消息,提示“Exception has been throwed通过在我的DefaultPage
中的以下行中的调用目标'。
Exception In Detail '元素已经是另一个元素的子元素。'
public MainPage()
InitializeComponent();
App.RootFrame.RemoveBackEntry();
this.LayoutRoot.Children.Add(APPCommon.busyindicator); // Error Occurs
因此,我想知道为什么会发生这种情况以及我应该做些什么来解决这个问题。
【问题讨论】:
你检查异常了吗?你知道,它有很多信息,可能是关于为什么抛出异常的信息。这就是抛出异常的原因,你知道的。 元素已经是另一个元素的子元素。 您是否在应用的其他视图中显示弹出窗口? 是的,我将它用作消息框等常用功能...它内置于启动页面并存储在静态变量中。然后在页面移动到另一个页面时添加到 layoutroot 并在用户离开页面时删除......! 你去。它已添加到另一个父级。可能是现在的那个。看看是否已经添加。如果没有,请重构您的代码,以便您每次都创建它的新实例。噗。错误消失了。 【参考方案1】:我建议使用“工厂”方法而不是 Popup 的共享实例。使用全局静态 UI 元素是自找麻烦...
public static Popup CreatePopup()
return new Popup
// ...
;
还有:
public MainPage()
InitializeComponent();
this.LayoutRoot.Children.Add(APPCommon.CreatePopup());
【讨论】:
实际上我试图为所有 ui 使用一个元素,但这会对内存性能造成问题......因为我试图挤压每一件事以获得完美的结果,而且很难当操作系统无法在空闲模式下处理这些 ui 时,工作 Windows 移动应用程序......! @gayan1991 我在想你可能有记忆。但我认为单例方法并没有真正为您带来任何好处——只是在 Popup 可能同时在 2 个地方使用时引发异常。 嗯,我不确定我获得了多少收益,但我正在为客户开发一款成本最低的 CRM 应用程序,例如诺基亚 LUMIA 520,总容量为 414 MB。我会试试这个,让你知道这个变化会如何影响。【参考方案2】:试试这个:
protected override void OnNavigatedTo(NavigationEventArgs e)
base.OnNavigatedTo(e);
App.RootFrame.RemoveBackEntry();
this.LayoutRoot.Children.Add(APPCommon.busyindicator);
【讨论】:
实际上它不起作用。它仍然显示,详细地说是“元素已经是另一个元素的子元素。”以上是关于什么会生成此错误“调用目标已引发异常”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我调用 DataAdapter.Update() 时,此 C# 代码会生成语法错误?
如何修复此 Access 2003 错误?数据输入自动生成值