我已阅读以下文章,我对vb.net版本非常感兴趣。
Microsoft Example Of Generic Method to safely perform Cross-Thread Invoke
我希望有一个扩展方法来简化和减少我需要使用委托为后台工作者/ UI更新任务编写的委托代码量。我想要GET和SET方法。
我已经通过telerik和开发者融合在google上尝试了通常的代码隐蔽程序而没有运气。开发人员融合只是挂起而telerik给我的代码,我无法工作,因为它有智能感知错误。我认为这需要人工转换,我将非常感谢任何帮助。
任何人都可以发一些vb.net代码来实现这一目标。
E.g。文本框和.Text属性或组合框和seletedvalue属性。
我在这里看过SET方法 VB.net avoiding cross thread exception with extension method
但不幸的是,我认为没有GET方法。提前谢谢。
答案 0 :(得分:0)
这对我的大脑来说看起来很奇怪......但是尝试这样的事情:
Imports System.ComponentModel
Imports System.Runtime.CompilerServices
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Task.Run(Sub()
Dim txt As String = TextBox1.InvokeGet(Function(tb) tb.Text)
Label1.InvokeSet(Sub(l) l.Text = "Hello " & txt)
End Sub)
End Sub
End Class
Public Module Module1
<Extension()> _
Public Sub InvokeSet(Of T As ISynchronizeInvoke)(ByVal control As T, ByVal toPerform As Action(Of T))
If control.InvokeRequired Then
control.Invoke(toPerform, New Object() {control})
Else
toPerform(control)
End If
End Sub
<Extension()> _
Public Function InvokeGet(Of T As ISynchronizeInvoke)(ByVal control As T, ByVal toPerform As Func(Of T, Object))
If control.InvokeRequired Then
Return control.Invoke(toPerform, New Object() {control})
Else
Return toPerform(control)
End If
End Function
End Module