我对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
发布于 2022-01-15 03:55:12
您的代码有几个问题:
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://stackoverflow.com/questions/70718632
复制相似问题