Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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
C# 用于简单跨线程调用Vb.net的自定义调用扩展_C#_Vb.net_Multithreading_Extension Methods_Data Conversion - Fatal编程技术网

C# 用于简单跨线程调用Vb.net的自定义调用扩展

C# 用于简单跨线程调用Vb.net的自定义调用扩展,c#,vb.net,multithreading,extension-methods,data-conversion,C#,Vb.net,Multithreading,Extension Methods,Data Conversion,我已经阅读了下面的文章,我对这篇文章的vb.net版本非常感兴趣 我希望有一个扩展方法来简化和减少使用委托为backgroundworker/UI更新任务编写的委托代码量。我想获取和设置方法 我在谷歌上尝试了telerik和developer fusion提供的常用代码转换器,但没有成功。开发者融合只是挂起,telerik给我的代码,我无法得到工作,因为它有智能感知错误。我认为这将需要一个人的转变,我将非常感谢任何帮助 谁能给我发一些vb.net代码来实现这一点 例如,文本框和.text属性或组

我已经阅读了下面的文章,我对这篇文章的vb.net版本非常感兴趣

我希望有一个扩展方法来简化和减少使用委托为backgroundworker/UI更新任务编写的委托代码量。我想获取和设置方法

我在谷歌上尝试了telerik和developer fusion提供的常用代码转换器,但没有成功。开发者融合只是挂起,telerik给我的代码,我无法得到工作,因为它有智能感知错误。我认为这将需要一个人的转变,我将非常感谢任何帮助

谁能给我发一些vb.net代码来实现这一点

例如,文本框和.text属性或组合框和seletedvalue属性

我在这里看到了一套方法


但不幸的是,我不认为有一个GET方法。提前谢谢。

这在我的脑子里看起来真的很奇怪……但试一下这样的方法:

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

好极了很有效,谢谢你。我是这个网站的新手,所以我不能把它归类为答案,也不能投票给它,因为我没有足够的声誉或其他什么。没问题。很高兴这有帮助。我不记得一开始它是怎么工作的。经过一定的时间或点数后,您可以返回并提升和/或接受您喜欢的帖子。