更新:关键部分是我们使用的流对于 copyto\copytoasync 使用的缓冲区来说太大了,所以我们需要异步处理部分流,而不是异步运行整个任务,就像下面链接的问题
请原谅这里的 VB.net 代码。我也会说 C#,所以可以随意用任何一种语言来回答。
我一直在关注这个例子,ProcessStartInfo 挂在“WaitForExit”上?为什么?为了尝试解决我们遇到的缓冲区空间不足的问题
以前我们尝试过这段代码:
Dim buffer As Byte() = New Byte(32767) {}
Dim file As Byte()
Using ms = New MemoryStream()
While True
Dim read As Integer = Process.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)
If read <= 0 Then
Exit While
End If
ms.Write(buffer, 0, read)
End While
file = ms.ToArray()
End Using
If Not Process.WaitForExit(timeOut) Then
Throw New Exception("Html to PDF conversion timed out.")
End If
现在我已经开始将其转换为链接问题中的 aynch 方法,但是在写入内存流而不是 stringbuilder 时遇到了麻烦。这是我到目前为止所得到的:
Dim output = new MemoryStream()
Dim errorOutput = new StringBuilder()
Using process = New Process()
Using outputWaitHandle As New AutoResetEvent(False)
Using errorWaitHandle As New AutoResetEvent(False)
process.OutputDataReceived = Function(sender, e)
If e.Data Is Nothing Then
outputWaitHandle.Set()
Else
output.Write(e.Data); //compile error here
End If
End Function
End Using
End Using
End Using
当然 e.Data 是一个字符串,但不仅我还需要一个缓冲区和一个偏移量......而且不知道在这里提供什么。
欢迎任何建议,谢谢!