Pregunta

En Windows 8 funcionó bien.Cuando lo actualicé a Windows 8.1 recibí un error:

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)'...

Aquí está mi método que recibe el error:

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;
}

¿Alguien me puede ayudar?

Gracias.

¿Fue útil?

Solución

Puede solucionar su problema usando el espacio de nombres completo:

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

Como es un método de extensión, puede llamarlo de la forma en que se muestra el código.

Otros consejos

lo que esta pasando es que AsRandomAccessStream existe en más de un espacio de nombres dentro del alcance.El compilador no puede saber a cuál te refieres.Tienes dos opciones:

  • Elimine el espacio de nombres que no necesita y que también contiene AsRandomAccessStream
  • Especifique la ruta completa a AsRandomAccessStream como System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream

Mi conjetura es que EventHandler.UI.Extensions.StreamExtensions.AsRandomAccessStream posiblemente fue agregado por la actualización y System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream es el que ya estabas usando.

AsRandomAccessStream es un método de extensión y no puedes elenco un método para algún espacio de nombres.Entonces no puedes hacer algo como object.ExtensionMethod() from MyNameSpace.ExtensionMethods o algo así, hasta donde yo sé...Si es realmente posible, ¡me gustaría conocerlo yo mismo!Por lo tanto, solo puede llamar a este método de extensión como cualquier otro método de clase estática normal.

Un pequeño código de ejemplo nunca viene 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)
        {
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top