Creați un nou fir în VB.NET (Programare, Vb.Net, Multithreading)

Matt9Atkins a intrebat.

Încerc să creez un fir nou folosind o funcție anonimă, dar continui să primesc erori. Aici este codul meu:

New Thread(Function() 
    // Do something here
End Function).Start

Aici sunt erorile pe care le primesc:

New:

Eroare de sintaxă

Termină funcția:

‘End Function’ trebuie să fie precedat de un ‘Function’ corespunzător.

Comentarii

  • posibil duplicat al VB.NET: Funcție anonimă la un fir nou –  > Por ctacke.
3 răspunsuri
MrMDavidson

Există două moduri de a face acest lucru;

  1. Cu AddressOf la o metodă existentă

    Sub MyBackgroundThread()
      Console.WriteLine("Hullo")
    End Sub
    

    Și apoi creați și începeți firul cu;

    Dim thread As New Thread(AddressOf MyBackgroundThread)
    thread.Start()
    
  2. Sau ca o funcție lambda.

    Dim thread as New Thread(
      Sub() 
        Console.WriteLine("Hullo")
      End Sub
    )
    thread.Start()
    

Comentarii

  • tancuri amice acest lucru a ajutat –  > Por Nagendra Upwanshi.
Hans Passant

Se numește expresie lambda în VB. Sintaxa este greșită, trebuie să declarați de fapt o variabilă de tip Thread pentru a utiliza operatorul New. Iar lambda pe care o creați trebuie să fie un substitut valid pentru argumentul pe care îl treceți la constructorul clasei Thread. Niciuna dintre acestea nu ia un delegat care să returneze o valoare, deci trebuie să folosiți Sub, nu Function. Un exemplu aleatoriu:

Imports System.Threading

Module Module1

    Sub Main()
        Dim t As New Thread(Sub()
                                Console.WriteLine("hello thread")
                            End Sub)
        t.Start()
        t.Join()
        Console.ReadLine()
    End Sub

End Module

Comentarii

  • Cred că merită menționat faptul că lambda-urile multiline funcționează doar în VS2010. –  > Por J….
  • Nu este o problemă de Windows Phone, este necesar VS2010. –  > Por Hans Passant.
  • E timpul să ne luăm cu mâinile de cap: o expresie lambda este doar o sintaxă alternativă pentru a scrie o funcție anonimă. A spune că o expresie lambda nu este o funcție anonimă este ca și cum ai spune că un pătrat nu este un dreptunghi. –  > Por Kevin Gosse.
IvanH

Ceea ce se numește trebuie să fie o funcție, nu un sub.

O singură linie (trebuie să returneze o valoare):

Dim worker As New Thread(New ThreadStart(Function() 42))

Multiline:

Dim worker As New Thread(New ThreadStart(Function()
                                                     ' Do something here
                                                 End Function))

Sursa: Filetare, închideri și expresii Lambda în VB.Net