2009-05-20 6 views
0

Wie kann ich eine Funktion mit Delegaten dynamisch aufrufen, indem Sie eine Zeichenfolge an einen Hintergrundthread in VB.NET übergeben?Wie kann ich eine Funktion dynamisch mit Delegaten aufrufen, indem Sie eine Zeichenfolge an einen Hintergrundthread in VB.NET übergeben?

Derzeit mein Code ist dies

Public Sub invertImageBK(ByVal image As Bitmap) 
    Dim snxl As System.ComponentModel.BackgroundWorker = createBW() 
    snxl.RunWorkerAsync(New ImageProperties(image.Clone, "invertImage", Nothing)) 
End Sub 
Public Sub grayscaleImageBK(ByVal image As Bitmap) 
    Dim snxl As System.ComponentModel.BackgroundWorker = createBW() 
    snxl.RunWorkerAsync(New ImageProperties(image.Clone, "grayscaleImage", Nothing)) 
End Sub 
Public Sub colorizeImageBK(ByVal image As Bitmap, ByVal colorize As Color) 
    Dim snxl As System.ComponentModel.BackgroundWorker = createBW() 
    snxl.RunWorkerAsync(New ImageProperties(image.Clone, "colorizeImage", colorize)) 
End Sub 

Private Sub ConvertImage(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) 
    If e.Argument.extra IsNot Nothing Then 
     Dim snxl As New twoarg() 
    Else 

    End If 

End Sub 

Private Delegate Function onearg(ByVal image As Bitmap) As Bitmap 
Private Delegate Function twoarg(ByVal image As Bitmap, ByVal altcolor As Color) As Bitmap 

Private Function createBW() As System.ComponentModel.BackgroundWorker 
    Dim cbs As New System.ComponentModel.BackgroundWorker 
    AddHandler cbs.DoWork, AddressOf ConvertImage 
    Return cbs 
End Function 

Public Structure ImageProperties 
    Dim img As Bitmap 
    Dim filt As String 

    Public Sub New(ByVal image As Bitmap, ByVal filter As String, ByVal extra As Object) 
     img = image.Clone 
     filt = filter 
    End Sub 
End Structure 

und schließlich wird es ein Ereignis auslösen mir mein Ergebnis zu geben.

Antwort

0

Hier ist, was ich tue:

Private Function oneargImplementation(ByVal image As Bitmap) As Bitmap 

End Function 

Public Sub Test() 

Private ArgOne as onearg = _ 
    new onearg(AddressOf oneargImplementation) 
Dispatcher.Invoke(ArgOne, Windows.Threading.DispatcherPriority.Loaded, New Object() {sender, e}) 
End Sub 
+0

nicht ganz, die Zeichenfolge AddressOf, wie ich konvertiere, dass – Jim

+0

Die oneargImplementation das Ereignis, das ausgelöst wird. –

Verwandte Themen