Asp.net 长时间运行进程新线程win forms vb.net
我通过按钮从windows窗体(vb.net 4.5)调用web服务 我的问题是,当我点击按钮时,进度条上什么也没有发生,交互似乎冻结/没有响应 我相信我需要将web服务调用放入一个线程中来实现这一点 这是我到目前为止得到的Asp.net 长时间运行进程新线程win forms vb.net,asp.net,vb.net,multithreading,Asp.net,Vb.net,Multithreading,我通过按钮从windows窗体(vb.net 4.5)调用web服务 我的问题是,当我点击按钮时,进度条上什么也没有发生,交互似乎冻结/没有响应 我相信我需要将web服务调用放入一个线程中来实现这一点 这是我到目前为止得到的 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ProgressBar1.Style = ProgressBarStyle.Marquee P
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ProgressBar1.Style = ProgressBarStyle.Marquee
ProgressBar1.MarqueeAnimationSpeed = 5
Dim webservice As New somewebservice.somewsdl
Dim output(3) As String
'this method can take 1-10 seconds...
Try
output = somewebservice.method()
Catch ex As Exception
txtErrorDesc.Text = ex.Message
End Try
ProgressBar1.MarqueeAnimationSpeed = 0
End Sub
如果您以framework4.x为目标,那么可以使用async/await。如果webservice不提供(可等待的)异步调用,则可以将调用包装为异步调用:
Private Function foo() As String
Threading.Thread.Sleep(5000)
Return "HelloWorld"
End Function
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Console.WriteLine("I am here")
Console.WriteLine(Await Task(Of String).Run(Function() foo()))
Console.WriteLine("And now I am here")
End Sub
通过调用您的Web服务也可以做到这一点
output = Await Task(Of String()).Run(Function() somewebservice.method())
这将从线程池创建一个线程,并运行对Web服务的调用。您的UI线程不会被阻止,当对Web服务的调用完成时,代码将继续留在原来的位置(在
wait
)。文本是一个链接,它只是MSDN上关于VB.Net中多线程的一个页面。