vb.net - Как объявить новую задачу как SUB с параметрами

Как вы знаете, у нас есть новый синтаксис в vb.net с возможностью создавать встроенные задачи, чтобы мы могли запускать их асинхронно.

Это правильный код:

        Dim testDeclaring As New Task(Sub()

                                      End Sub)
        testDeclaring.Start()

но теперь мне нужно передать параметр в подпрограмму, и я не могу найти для этого правильный синтаксис. Возможно ли это каким-либо образом?


person newbeee    schedule 20.04.2013    source источник


Ответы (3)


Это невозможно. Однако вы можете просто использовать параметры из текущей области:

Public Function SomeFunction()

    Dim somevariable as Integer = 5

    Dim testDeclaring As New Task(Sub()
                                   Dim sum as integer = somevariable + 1  ' No problems here, sum will be 6
                              End Sub)
    testDeclaring.Start()

End Function   
person Kenneth    schedule 20.04.2013
comment
Благодарю вас! Это то, что я искал. Кстати, это вызывает некоторое странное поведение в моем контексте, но я думаю, что это проблема для другой темы. - person newbeee; 20.04.2013

Если вы хотите передать параметр, вы можете сделать это

    Dim someAction As Action(Of Object) = Sub(s As Object)
                                              Debug.WriteLine(DirectCast(s, String))
                                          End Sub

    Dim testDeclaring As New Task(someAction, "tryme")
    testDeclaring.Start()
person dbasnett    schedule 20.04.2013
comment
Что делать, если есть более одного параметра? Есть ли правильный способ, а не передавать ArrayList параметров? - person Sdlion; 30.11.2016

Не знаю, если вы ищете это:

Dim t As Task = New Task(Sub() RemoveBreakPages(doc))

Sub RemoveBreakPages(ByRef doc As Document)
        Dim paragraphs As NodeCollection = doc.GetChildNodes(NodeType.Paragraph, True)
        Dim runs As NodeCollection = doc.GetChildNodes(NodeType.Run, True)
        For Each p In paragraphs
            If CType(p, Paragraph).ParagraphFormat().PageBreakBefore() Then
                CType(p, Paragraph).ParagraphFormat().PageBreakBefore = False
            End If
        Next
    End Sub

С Уважением.

person Jorge Solano    schedule 12.07.2018