我有一个执行同步任务的函数,我会做同样的但是使用异步任务。
我该怎么办?
这是代码:
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
结束班
答案 0 :(得分:1)
这样的事情应该这样做:
username=driver.find_element_by_name("UserId")
username.send_keys("test")
我将WriteData拆分为一个单独的函数,因为我没有库。你可以把它写成lamda函数。要取消任务,只需从取消按钮处理程序中调用cancelSource.cancel。
可能不需要uiSyncContext - 它只是确保当您的任务完成时,管道中的下一步将在UI线程上运行。如果您不这样做,并且尝试以某种方式更新GUI,则会出现错误。
我们首先创建一个通过运行gensin函数返回双精度数组的任务。然后,我们附加一个写入输出的继续任务。仅当第一个任务完成正常时,才会运行继续任务。如果您取消了它,或者它抛出了错误,则不会运行。您可以通过这种方式将一大堆任务链接在一起,并为成功/失败/取消结果提供不同的路由