未处理的异常在WP7中

11
我在制作WP7应用程序时遇到了一个奇怪的错误,但我不知道为什么会出现这种情况。唯一的输出/错误信息是“UnhandledException:参数不正确。: : : ProgramName.App”

这个错误是随机发生的,调试器没有提供任何解决方法的信息。当我运行相同的代码两次时,有一次会出现错误,而另一次则不会。所以,你们有没有遇到过这个错误,并且可以告诉我为什么会发生?这真的很令人沮丧,因为它是如此随机。非常感谢你们的任何建议:)

编辑:以下是完整的堆栈跟踪:

at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.Collection_AddValue[T](PresentationFrameworkCollection`1 collection, CValue value)
at MS.Internal.XcpImports.Collection_AddDependencyObject[T](PresentationFrameworkCollection`1 collection, DependencyObject value)
at System.Windows.PresentationFrameworkCollection`1.AddDependencyObject(DependencyObject value)
at System.Windows.Controls.UIElementCollection.AddInternal(UIElement value)
at System.Windows.PresentationFrameworkCollection`1.Add(UIElement value)
at System.Windows.Controls.ItemsControl.AddVisualChild(Int32 index, DependencyObject container, Boolean needPrepareContainer)
at System.Windows.Controls.ItemsControl.AddContainers()
at System.Windows.Controls.ItemsControl.RecreateVisualChildren(IntPtr unmanagedObj)
at MS.Internal.XcpImports.MeasureOverrideNative(IntPtr element, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
at Microsoft.Phone.Controls.Pivot.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)
2个回答

6

我曾经遇到过同样的问题。对我来说解决方法是给我想要添加的每个元素都指定一个唯一的名称(例如,Name = Guid.NewGuid().ToString())。希望这对你也有帮助!


那正是我所做的事情,看起来它起作用了!很抱歉之前没有将它发布为答案。似乎并不像很多人都有这个问题。但是非常好的工作,我将其标记为答案 :) - kgrevehagen
“每个元素”是什么意思?不确定我理解了答案 :) - japf
每个元素指的是每个UI控件。还包括在您的代码中运行时生成的每一个控件。 - Jan K.
@JanK。我在XAML中声明了所有元素。那么我该如何像你提到的那样添加唯一名称? - onmyway133
@entropy 只需删除 x:Name 参数即可。 - Poppyto

3

点击调试,然后选择异常,将公共语言运行时异常设置为“抛出”,您应该可以看到堆栈跟踪。

但是,我认为这是一个错误,无法在不查看代码/堆栈跟踪的情况下解决它。


谢谢,这给了我堆栈跟踪。正如预期的那样,它是一个System.ArgumentException(“参数不正确”),但我该如何解决这个问题?堆栈跟踪如下:
  • 在MS.Internal.XcpImports.CheckHResult(UInt32 hr)
  • 在MS.Internal.XcpImports.Collection_AddValue[T](PresentationFrameworkCollection`1 collection, CValue value)
  • 在MS.Internal.XcpImports.Collection_AddDependencyObject[T](PresentationFrameworkCollection`1 collection, DependencyObject value)............
对于糟糕的格式化表示抱歉。
- kgrevehagen
请在问题中添加完整的堆栈跟踪信息。有时这样可以获取到额外的信息。 - Jan Slodicka
1
嗨,Kgrevehagen,请帮我们一个忙,通过编辑在原始问题中添加完整的堆栈跟踪。仅查看这些行并不能说明问题。还有其他信息吗?另外,请尝试以调试模式启动应用程序并使用F11键进行步进,这将让您了解此异常抛出的具体位置。可能是某个方法正在尝试传递不正确的值,也可能是应用程序占用的内存超过了可用内存。这可能是开发手机应用程序时的情况。 - Adnan Bhatti
我只需要再次获取异常并记得将公共语言运行时异常设置为“抛出”,以获取完整的堆栈跟踪。我设置为“抛出”的东西似乎每次打开Visual Studio时都会被取消设置。很奇怪... - kgrevehagen
当您遇到异常(已将设置为在抛出异常时中断),双击第二个堆栈(从顶部开始),并在调试器中查看本地变量和自动变量,以了解集合和值的情况... - Damian
当我查看本地变量和自动变量时,它并没有给我任何有用的信息,特别是问题可能在XAML还是代码中?这可能与元素的大小有关吗?我已经设法复制它;当我将一个特定的用户控件放在一个PivotItem中时。但是这个用户控件只是与另一个工作的控件略有不同。而且这个用户控件在其他地方也能正常工作,至少有时候。这可能是竞争条件问题吗?任何帮助或指导都将不胜感激,因为这个错误会使应用程序多次冻结。 - kgrevehagen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接