x64 上的 ScatterView 运行时异常
ScatterView runtime exception on x64
我遇到了与描述相同的问题 here。
我们使用旧的 Microsoft Surface 2.0 SDK. 开发了几个应用程序,这些应用程序构建为 AnyCPU
,并且这些应用程序在 32 位和 64 位模式下工作得很好 运行。在其中一个应用程序中,我使用了 ScatterView
。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="http://schemas.microsoft.com/surface/2008"
Title="MainWindow" Height="350" Width="525">
<Grid>
<s:ScatterView x:Name="timeline">
<Rectangle></Rectangle>
</s:ScatterView>
</Grid>
</Window>
但是,如果我尝试在新的空白 Window
中添加新的 ScatterView
,我会收到此错误:
{"The type initializer for 'Microsoft.Surface.Core.InteractiveSurface' threw an exception."}
System.TypeInitializationException was unhandled
HResult=-2146233036
Message=The type initializer for 'Microsoft.Surface.Presentation.Input.InteractiveSurface' threw an exception.
Source=Microsoft.Surface.Presentation
TypeName=Microsoft.Surface.Presentation.Input.InteractiveSurface
如果我在 32 bit
中强制应用程序 运行 它 运行 完美。然而,该应用程序非常占用内存,所以我也想 运行 它在 64 bit
中。
我的问题是:为什么我当前应用程序中的 ScatterView 运行 完美地支持 64 位,但向该应用程序添加了一个额外的 ScatterView 或创建了一个 brend新应用程序立即崩溃。不幸的是,前面问题给出的答案已经死了link。
当然,经过 48 小时的搜索,我找到了解决我自己问题的方法。
当您在 ScatterView
中添加项目时,会调用 Microsoft.Surface.Presentation.Controls.ScatterCanvas
中的函数 GetItemOrientation
。这个函数决定了ScatterViewItem
的旋转。当 运行在 64bit
中连接您的应用程序时,此方法失败并抛出异常,这可能是由于调用本机方法以确定 SUR40 应 运行 的方向引起的.
解法:
您可以通过自己在 ScatterViewItem
上设置 Orientation
属性 或设置 ScatterViewItem.CanRotate = false
来禁用对 GetItemOrientation
的函数调用。
我遇到了与描述相同的问题 here。
我们使用旧的 Microsoft Surface 2.0 SDK. 开发了几个应用程序,这些应用程序构建为 AnyCPU
,并且这些应用程序在 32 位和 64 位模式下工作得很好 运行。在其中一个应用程序中,我使用了 ScatterView
。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="http://schemas.microsoft.com/surface/2008"
Title="MainWindow" Height="350" Width="525">
<Grid>
<s:ScatterView x:Name="timeline">
<Rectangle></Rectangle>
</s:ScatterView>
</Grid>
</Window>
但是,如果我尝试在新的空白 Window
中添加新的 ScatterView
,我会收到此错误:
{"The type initializer for 'Microsoft.Surface.Core.InteractiveSurface' threw an exception."}
System.TypeInitializationException was unhandled
HResult=-2146233036
Message=The type initializer for 'Microsoft.Surface.Presentation.Input.InteractiveSurface' threw an exception.
Source=Microsoft.Surface.Presentation
TypeName=Microsoft.Surface.Presentation.Input.InteractiveSurface
如果我在 32 bit
中强制应用程序 运行 它 运行 完美。然而,该应用程序非常占用内存,所以我也想 运行 它在 64 bit
中。
我的问题是:为什么我当前应用程序中的 ScatterView 运行 完美地支持 64 位,但向该应用程序添加了一个额外的 ScatterView 或创建了一个 brend新应用程序立即崩溃。不幸的是,前面问题给出的答案已经死了link。
当然,经过 48 小时的搜索,我找到了解决我自己问题的方法。
当您在 ScatterView
中添加项目时,会调用 Microsoft.Surface.Presentation.Controls.ScatterCanvas
中的函数 GetItemOrientation
。这个函数决定了ScatterViewItem
的旋转。当 运行在 64bit
中连接您的应用程序时,此方法失败并抛出异常,这可能是由于调用本机方法以确定 SUR40 应 运行 的方向引起的.
解法:
您可以通过自己在 ScatterViewItem
上设置 Orientation
属性 或设置 ScatterViewItem.CanRotate = false
来禁用对 GetItemOrientation
的函数调用。