0

Я прочитал следующую статью, и меня очень интересует версия vb.net.Custom Invoke Extension для простых вызовов по перекрестному потоку Vb.net

Microsoft Example Of Generic Method to safely perform Cross-Thread Invoke

Я хотел бы иметь метод расширения, чтобы упростить и уменьшить количество делегата кода, который я должен был бы написать для задачи обновления BackgroundWorker/UI с помощью делегатов. Мне нужны методы GET и SET.

Я пробовал обычные обложки кода на google с помощью telerik и слияния разработчиков без везения. Слияние разработчиков просто зависает, и telerik дает мне код, который я не могу работать, поскольку он имеет ошибки intellisense. Я думаю, что для этого потребуется человеческое обращение, и я был бы очень благодарен за любую помощь.

Может ли кто-нибудь отправить мне код vb.net, чтобы это произошло.

E.g. текстовое поле и свойство .Text или свойство combobox и свойство seletedvalue.

Я видел метод SET здесь VB.net avoiding cross thread exception with extension method

Но, к сожалению, я не думаю, что есть метод GET. Заранее спасибо.

ответ

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 
+0

Fantastic! Он очень благодарит вас. Я новичок в этом сайте, поэтому я не могу классифицировать это как ответ или повышать его, поскольку у меня недостаточно репутации или чего-то еще. –

+0

Нет проблем. Рад, что это помогло. Я не помню точно, как это работает в начале. Через определенное количество времени или очков вы можете вернуться и подобрать и/или принять сообщения, которые вам нравятся. –

Смежные вопросы