對于我遇到的這個問題,我似乎在兜圈子。我使用的舊代碼如下:
private ImageSource LoadImg(string url)
{
WebClient MyWebClient = new WebClient();
byte[] BytesFile = MyWebClient.DownloadData(url);
Stream m2 = new MemoryStream(BytesFile);
return ImageSource.FromStream(() => m2);
}
我可以通過呼叫來非常輕松地使用它:
mainimg.Source = LoadImg(url);
現在我想將其轉換為異步并使用 httpClient 因為 WebClient 已停產?所以我試著這樣做
private async Task<ImageSource> LoadImg2Async(url)
{
System.Diagnostics.Debug.WriteLine("Firing LoadImg2");
var httpResult = await Client.GetAsync(url);
using var resultStream = await httpResult.Content.ReadAsStreamAsync();
//using var fileStream = File.Create(@"c:\dev\yaythisworks.png");
//resultStream.CopyTo(fileStream);
return ImageSource.FromStream(() => resultStream);
}
似乎有道理,至少有那么一點點。但是,那么我如何使用任務的回報呢?我努力了:
mainimg.Source = LoadImg2Async(url).Result;
但我無法讓它作業
有人有什么想法嗎?這次我真的嘗試在谷歌上搜索答案,找不到關于如何從任務回傳的任何答案。
太感謝了
安德魯
uj5u.com熱心網友回復:
感謝大家的幫助,你們幫助我走上了正確的道路!
看起來不可能從 httpClient 回傳流,我不確定為什么。當我擺弄周圍時,看起來溪流可能是空的?!無論如何,我發現的唯一方法是回傳位元組。
我不得不將任務回傳型別更改為位元組,然后回傳 ms.ToArray();
private async Task<byte[]> LoadImg2Async(string pathtopdf)
{ System.Diagnostics.Debug.WriteLine(pathtopdf);
string pdfpathcorr = pathtopdf.Replace(@"Y:\", roothttpaddy);
string url = pdfpathcorr.Replace(@"\", "/");
System.Diagnostics.Debug.WriteLine("Corrected URL STRING = " url);
var httpResult = await Client.GetAsync(url);
byte[] bytearray = await httpResult.Content.ReadAsByteArrayAsync();
MemoryStream iStream = new MemoryStream(bytearray);
PdfFixedDocument document = new PdfFixedDocument(iStream);
PdfRendererSettings settings = new PdfRendererSettings();
settings.DpiX = 10;
settings.DpiY = 10;
MemoryStream ms = new MemoryStream();
PdfPageRenderer renderer = new PdfPageRenderer(document.Pages[0]);
renderer.ConvertPageToImage(ms, PdfPageImageFormat.Png, settings);
//FileStream stm = File.OpenWrite(@"c:\dev\pdf " fileid.ToString() ".png");
//renderer.ConvertPageToImage(stm, PdfPageImageFormat.Png, settings);
ms.Position = 0;
return ms.ToArray();
}
然后消費它我需要
byte[] bytearray = await LoadImg2Async(item.PDFPath);
MemoryStream stream = new MemoryStream(bytearray);
item.pdfpathconvert = ImageSource.FromStream(() => stream);
它確實有效,但看起來很笨重。我正在從 httpClient 讀取位元組,然后將其放入流中,然后轉換為影像并從異步任務回傳位元組,然后我必須將其放入新流中以將其轉換為 ImageSource。
有什么提示或建議嗎?
我知道我的代碼可能不是最精簡的,我現在只是想以一種合乎邏輯的方式來完成它,但歡迎任何提示。
謝謝
安德魯
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533690.html
標籤:C#异步毛伊岛图片来源
