vb.net - 我应该如何修改此代码以适应异步行为?
问题描述
我有一个按钮。如果按下按钮,我希望禁用所有按钮。然后我想做点什么。完成后,我希望重新启用所有按钮。
简单吧?
这是代码
Public Sub startAndStopClickingButton(ByVal sender As Object, ByVal SomeSub As System.Action)
startClickingButton(sender)
SomeSub.Invoke()
stopClickingButton(sender)
End Sub
然后我做
Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles cmdGroupRepeat.Click
startAndStopClickingButton(sender, Sub()
finRepeatOrdering() ' this one never end
Dim b = 1
End Sub)
End Sub
它工作得很好。Startclickingbutton 被调用。然后我调用中间的任何 lambda。然后在它完成后(实际上从来没有),调用 stopclickingbutton 。简单的。
然后我改变了我的程序。finRepeatOrdering 现在是 finRepeatOrderingAsync。
但是,我仍然想要相同的行为。我希望在按下 stopClickingButton 之前等待 finRepeatOrderingAsync 完成。
所以,我做了这个
Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles cmdGroupRepeat.Click
startAndStopClickingButton(sender, Async Sub()
Await finRepeatOrderingAsync() ' this one never end
Dim b = 1 'a breakpoint here
End Sub)
End Sub
现在 dim b=1 永远不会被调用。但是,过早地调用了 stopClickingButton。怎么来的?
我应该如何更改程序以使其正常工作?
我试过了
Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles cmdGroupRepeat.Click
startAndStopClickingButton(sender, Async Function() As Task
Await finRepeatOrderingAsync() ' this one never end
Dim b = 1
End Function)
End Sub
Public Async Function startAndStopClickingButton2(ByVal sender As Object, ByVal SomeSub As System.Func(Of Task)) As Task
startClickingButton(sender)
Await SomeSub.Invoke()
stopClickingButton(sender)
End Function
我收到了编译器警告
严重性代码 描述 项目文件行抑制状态警告 BC42359 从此异步函数返回的任务将被删除,其中的任何异常都将被忽略。考虑将其更改为 Async Sub,以便传播其异常。nicehash2 H:\business\shared\Dropbox\vb.net\nicehashform.vb 60 活动
解决方案
尝试这个:
Public Async Function startAndStopClickingButton(ByVal sender As Object, ByVal SomeSub As System.Func(Of Task)) As Task
startClickingButton(sender)
Await SomeSub.Invoke()
stopClickingButton(sender)
End Function
Private Async Sub Button2_Click_1(sender As Object, e As EventArgs) Handles cmdGroupRepeat.Click
Await startAndStopClickingButton(sender, Async Function() As Task
Await finRepeatOrderingAsync()
Dim b = 1
End Sub)
End Sub
推荐阅读
- amazon-web-services - 通过存储桶策略删除具有所有人读取权限的 AWS S3 存储桶
- wordpress - 元滑块图像标题
- jquery - 制表器插件未加载
- debugging - KDevelop 不会开始调试
- jsf - PrimeFaces 菜单栏图像
- c# - 用于 confluent-kafka-dotnet 的 Docker 容器内的 Confluent 监控拦截器
- c# - 根据值决定创建哪个派生类?
- python - Insert new element as the head of the Linkedlist Python
- jenkins - 如何通过詹金斯在远程机器上运行命令
- java - 致命例外:android studio 中的主要错误