Visual Basic异步任务而不是同步任务

时间:2016-05-23 08:00:00

标签: vb.net asynchronous task

我有一个执行同步任务的函数,我会做同样的但是使用异步任务。

我该怎么办?

这是代码:

Public Class Form1     私有任务作为任务

Private Sub Button_Start_Click(sender as Object,e As EventArgs)处理Button_Start.Click

    Dim freq As Double = TextBox1.Text
    Dim Amp As Double = TextBox2.Text
    Dim SPB As Double = TextBox3.Text
    Dim CPB As Double = TextBox4.Text
    '---------------------------------------
    Dim SCRate As Double = (freq * SPB) / CPB
    '---------------------------------------
    taskOUT = New Task()  'Crea un task
    taskOUT.AOChannels.CreateVoltageChannel("Dev1/ao0", "", -10, 10, AOVoltageUnits.Volts) 'Aggiunge un canale in Out
    taskOUT.Timing.SampleClockRate = SCRate
    taskOUT.Timing.ConfigureSampleClock("", SCRate, SampleClockActiveEdge.Rising, SampleQuantityMode.ContinuousSamples, 1000)
    '-----------------------------
    Dim ydata As Double()
    ydata = GenSin(freq, Amp, SCRate, SPB)
    '-------------------------------------------
    Dim writer As New AnalogSingleChannelWriter(taskOUT.Stream)
    writer.WriteMultiSample(False, ydata)
    taskOUT.Start()
End Sub
'-----------------------------------------------------------------------
Public Shared Function GenSin( _
    ByVal freq As Double, _
    ByVal amp As Double, _
    ByVal sampleClockRate As Double, _
    ByVal samplePerBuffer As Double) As Double()

    Dim dt As Double
    Dim IntSample As Integer

    dt = 1 / sampleClockRate
    IntSample = CInt(SamplePerBuffer) - 1
    Dim y(IntSample - 1) As Double
    For i As Integer = 0 To IntSample - 1
        y(i) = amp * Math.Sin((2.0 * Math.PI) * freq * (i * dt))
    Next
    Return y
End Function

Private Sub Button_Stop_Click(sender As Object, e As EventArgs) Handles Button_Stop.Click
    taskOUT.Stop()
    taskOUT.Dispose()
End Sub

结束班

1 个答案:

答案 0 :(得分:1)

这样的事情应该这样做:

username=driver.find_element_by_name("UserId")
username.send_keys("test")

我将WriteData拆分为一个单独的函数,因为我没有库。你可以把它写成lamda函数。要取消任务,只需从取消按钮处理程序中调用cancelSource.cancel。

可能不需要uiSyncContext - 它只是确保当您的任务完成时,管道中的下一步将在UI线程上运行。如果您不这样做,并且尝试以某种方式更新GUI,则会出现错误。

我们首先创建一个通过运行gensin函数返回双精度数组的任务。然后,我们附加一个写入输出的继续任务。仅当第一个任务完成正常时,才会运行继续任务。如果您取消了它,或者它抛出了错误,则不会运行。您可以通过这种方式将一大堆任务链接在一起,并为成功/失败/取消结果提供不同的路由