2015-09-09 7 views
1

J'ai le même problème que décrit here.Exception d'exécution ScatterView sur x64

Nous avons développé plusieurs applications en utilisant l'ancien Microsoft Surface 2.0 SDK. Les applications sont construites en AnyCPU et fonctionnent parfaitement en mode 32 bits et 64 bits. Dans l'une de ces applications, j'utilise un 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> 

Cependant, si je tente d'ajouter une nouvelle ScatterView dans une nouvelle vierge Window je reçois cette erreur:

{"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 

Si je force l'application à exécuter en 32 bit il fonctionne parfaitement. Cependant, l'application demande beaucoup de mémoire, donc je voudrais l'exécuter également en 64 bit.

Ma question est: Comment se fait le ScatterView dans mon application actuelle fonctionne parfaitement en 64 bits, mais en ajoutant un ScatterView supplémentaire à cette application ou la création d'un nouveau plantages d'application Brend immédiatement. Malheureusement, la réponse donnée dans les questions précédentes a un lien mort.

Répondre

1

Bien sûr, après 48 heures de recherche, j'ai trouvé une solution à ma propre question.

Lorsque vous ajoutez un élément dans ScatterView, un appel est effectué à la fonction GetItemOrientation dans Microsoft.Surface.Presentation.Controls.ScatterCanvas. Cette fonction détermine la rotation du ScatterViewItem. Lorsque vous exécutez votre application en 64bit, cette méthode échoue et déclenche une exception, probablement provoquée par un appel à une méthode native pour déterminer l'orientation du SUR40 sur lequel elle est censée s'exécuter.

Solution: Vous pouvez désactiver l'appel de fonction à GetItemOrientation en définissant la propriété Orientation sur la ScatterViewItem vous ou en définissant ScatterViewItem.CanRotate = false.