我不太了解Async,但是運行它時我沒有收到任何錯誤,而且我仍然沒有在 C:\temp\test.jpg 中獲得影像 - 我做錯了什么?
Private Sub WebView22_Click(sender As Object, e As EventArgs) Handles WebView22.Click
grabpic()
End Sub
Public Async Function grabpic() As Threading.Tasks.Task
Dim ms As System.IO.Stream
Await (WebView22.CoreWebView2.CapturePreviewAsync(CoreWebView2CapturePreviewImageFormat.Jpeg, ms))
Dim file As New System.IO.FileStream("C:\temp\test.jpg", IO.FileMode.Create)
ms.CopyTo(file)
ms.Close()
End Function
uj5u.com熱心網友回復:
您的代碼存在一些問題:
你不是在等待這個
graphics()函式,因此例外被默默地吞噬了。另外,我不確定是什么觸發Click了 WebView2 控制元件的事件(假設它實際上可以被觸發)。因此,例如,您可能應該使用按鈕單擊進行測驗。您根本沒有進行初始化
ms,這將導致 NullReferenceException。您可能想創建一個MemoryStream.您在寫入流
ms.CopyTo后呼叫。此時,當前位置將位于流的末尾,并且不會寫入任何內容file。您要么需要在開頭設定位置(即,ms.Seek(0, SeekOrigin.Begin)要么使用ms.WriteTo()。
這樣,該graphics()方法將如下所示:
Public Async Function grabpic() As Task
Using ms As New IO.MemoryStream()
Await WebView22.CoreWebView2.CapturePreviewAsync(
CoreWebView2CapturePreviewImageFormat.Jpeg, ms)
Using file As New IO.FileStream("C:\temp\test.jpg", IO.FileMode.Create)
ms.Seek(0, IO.SeekOrigin.Begin)
ms.CopyTo(file)
End Using
End Using
End Function
但是,在這種情況下,您實際上并不需要 MemoryStream。您可以直接寫入 FileStream。下面是最終代碼的樣子:
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Await grabpic()
End Sub
Public Async Function grabpic() As Task
Using file As New IO.FileStream("C:\temp\test.jpg", IO.FileMode.Create)
Await WebView22.CoreWebView2.CapturePreviewAsync(
CoreWebView2CapturePreviewImageFormat.Jpeg, file)
End Using
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411194.html
標籤:
