Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 长时间运行进程新线程win forms vb.net_Asp.net_Vb.net_Multithreading - Fatal编程技术网

Asp.net 长时间运行进程新线程win forms vb.net

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

我通过按钮从windows窗体(vb.net 4.5)调用web服务

我的问题是,当我点击按钮时,进度条上什么也没有发生,交互似乎冻结/没有响应

我相信我需要将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 

如果您以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中多线程的一个页面。