尝试在c#UWP上{imgur上传图片

时间:2017-03-04 13:44:51

标签: c# uwp imgur

我是C#的新手,我正在使用imgurAPI做一个应用程序。 我正在尝试上传图片,但似乎在阅读文件时出现问题。不知道该怎么办。 (错误不是来自Oauth,也不是访问令牌等)

这是我使用的功能。第一个是点击上传按钮时调用的那个。

public async void FileNameButton_Click()
    {
        try
        {
            Debug.WriteLine("ICI");
            FileOpenPicker fileOpenPicker = new FileOpenPicker();
            fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;
            fileOpenPicker.FileTypeFilter.Add(".png");
            fileOpenPicker.FileTypeFilter.Add(".jpeg");
            fileOpenPicker.FileTypeFilter.Add(".jpg");
            fileOpenPicker.FileTypeFilter.Add(".gif");

            StorageFile file = await fileOpenPicker.PickSingleFileAsync();
            if (file != null)
            {

                _path = file.Path;
                await UploadImage();
                Debug.WriteLine(file.Path);
            }
        }
        catch (Exception exception)
        {
            Debug.WriteLine(exception.Message);
        }
    }

_

public async Task UploadImage()
    {
        Debug.WriteLine("UPLOADIMAGE");
        try
        {
            if (_path != null)
            {
                Debug.WriteLine("String to upload " + _path); 
                //_path is ok here, form is         "C:\Users\MyName\Pictures\1412091183-dreamfall-chapters.jpg"

                var endpoint = new ImageEndpoint(SimpleIoc.Default.GetInstance<ImgurApi>()._Client);
                try
                {
                    var file = File.ReadAllBytes(_path);
                    var image = await endpoint.UploadImageBinaryAsync(file);
                }
                catch (Exception message)
                {
                    Debug.WriteLine(message);
                }

            }
        }
        catch (Imgur.API.ImgurException imgurEx)
        {
            Debug.Write("An error occurred uploading an image to Imgur.");
            Debug.Write(imgurEx.Message);
        }
    }

以下是我得到的错误:

  

抛出异常:'System.InvalidOperationException'   System.IO.FileSystem.dll System.InvalidOperationException:Synchronous   不应在UI线程上执行操作。考虑   在Task.Run中包装此方法。在   System.IO.WinRTFileSystem.EnsureBackgroundThread()at   System.IO.WinRTFileSystem.Open(String fullPath,FileMode mode,   FileAccess访问,FileShare共享,Int32 bufferSize,FileOptions   System.IO.FileStream.Init(String。中的options,FileStream parent)   path,FileMode模式,FileAccess访问,FileShare共享,Int32   bufferSize,FileOptions options)at   System.IO.File.InternalReadAllBytes(String path)at   Epicture.ViewModels.MainPageVm.d__19.MoveNext()   C:\ Users \用户迪尼\图片\ 1412091183-梦陨-chapters.jpg

提前致谢。

1 个答案:

答案 0 :(得分:0)

您正在使用File.ReadAllBytes,这是一个同步调用,将阻止UI线程。

您应该使用异步IO API。

ImageEndpoint还有一个接受流的方法,这是更好的方法。

示例:

using(var file = File.OpenRead(_path))
{
    var image = await endpoint.UploadImageStreamAsync(file);
}