我通过按钮
从Windows窗体(vb.net 4.5)调用Web服务我的问题,当我点击按钮时,进度条没有任何反应,并且interace似乎已冻结/无响应
我相信我需要将Web服务调用放入一个线程来完成这个
这是我到目前为止所做的事情
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
答案 0 :(得分:0)
如果您定位Framework 4.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
通过调用您的webservice可以完成同样的工作
output = Await Task(Of String()).Run(Function() somewebservice.method())
这将从ThreadPool创建一个线程并运行您对Web服务的调用。您的UI线程不会被阻止,当对Web服务的调用完成时,代码将继续保留(Await
)。