我是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
提前致谢。
答案 0 :(得分:0)
您正在使用File.ReadAllBytes
,这是一个同步调用,将阻止UI线程。
您应该使用异步IO API。
ImageEndpoint还有一个接受流的方法,这是更好的方法。
示例:
using(var file = File.OpenRead(_path))
{
var image = await endpoint.UploadImageStreamAsync(file);
}