Question

Sous Windows 8, cela fonctionnait bien.Lorsque je l'ai mis à niveau vers Windows 8.1, j'ai eu une erreur :

Error   1   The call is ambiguous between the following methods or properties: 'System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(System.IO.Stream)' and 'EventHandler.UI.Extensions.StreamExtensions.AsRandomAccessStream(System.IO.Stream)'...

Voici ma méthode qui obtient l'erreur :

public BitmapImage ConvertByteArrayToBitMapImage(byte[] imageByteArray)
{
    BitmapImage bitmapImg = new BitmapImage();
    MemoryStream memStream = new MemoryStream(imageByteArray);

    var randomAccessStream = memStream.AsRandomAccessStream(); //This line has error.
    bitmapImg.SetSourceAsync(randomAccessStream);

    return bitmapImg;
}

Est-ce que quelqu'un peut m'aider?

Merci.

Était-ce utile?

La solution

Vous pouvez résoudre votre problème en utilisant l'espace de nom complet:

  var randomAccessStream = 
     System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(memStream);

Comme c'est une méthode d'extension, vous pouvez l'appeler comme indique le code.

Autres conseils

Ce qui se passe, c'est que AsRandomAccessStream existe dans plusieurs espaces de noms dans la portée .Le compilateur ne peut pas savoir à lequel vous faites référence.Vous avez deux options :

  • Supprimez l'espace de noms dont vous n'avez pas besoin et qui contient également AsRandomAccessStream
  • Spécifiez le chemin complet vers AsRandomAccessStream comme System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream

Je suppose que EventHandler.UI.Extensions.StreamExtensions.AsRandomAccessStream a peut-être été ajouté par la mise à jour et System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream est celui que vous utilisiez déjà.

AsRandomAccessStream est une méthode d'extension, et vous ne pouvez pas casting une méthode vers un espace de noms.Donc tu ne peux pas faire quelque chose comme object.ExtensionMethod() from MyNameSpace.ExtensionMethods ou alors, pour autant que je sache...Si c'est réellement possible, j'aimerais le savoir moi-même !Vous ne pouvez donc appeler cette méthode d’extension que comme n’importe quelle autre méthode de classe statique classique.

Un petit exemple de code ne fait jamais de mal :

    using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Example NewExample = new Example();
            //NewExample.DoSomething(); //Ambiguous error
            ExtensionClass1.DoSomething(NewExample); //OK
        }
    }

    public class Example
    {

    }

    public static class ExtensionClass1
    {
        public static void DoSomething(this Example A)
        {
        }
    }

    public static class ExtensionClass2
    {
        public static void DoSomething(this Example A)
        {
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top