Hello all.
I succeeded in making something awesome: A thread execute plug-in!.
Basically it executes the given sub on a separate thread using delegates.
I also made a "Delegate Execute" plug-in to invoke a sub.
Thread Execute code Code:
#Region "Thread Execute" Public Delegate Sub DSparam0() Public Delegate Sub DSparam1(ByVal Param1 As Object) Public Delegate Sub DSparam2(ByVal Param1 As Object, ByVal Param2 As Object) Public Delegate Sub DSparam3(ByVal Param1 As Object, ByVal Param2 As Object, ByVal Param3 As Object) Public Delegate Sub DSparam4(ByVal Param1 As Object, ByVal Param2 As Object, ByVal Param3 As Object, ByVal Param4 As Object) Public Delegate Sub DSparam5(ByVal Param1 As Object, ByVal Param2 As Object, ByVal Param3 As Object, ByVal Param4 As Object, ByVal Param5 As Object) Private TData As New List(Of Object) Public Sub ThreadExecute(ByVal Subname As DSparam0) TExec(Subname, Nothing) End Sub Public Sub ThreadExecute(ByVal Subname As DSparam1, ByVal ParamArray Parameters() As Object) TExec(Subname, Parameters) End Sub Public Sub ThreadExecute(ByVal Subname As DSparam2, ByVal ParamArray Parameters() As Object) TExec(Subname, Parameters) End Sub Public Sub ThreadExecute(ByVal Subname As DSparam3, ByVal ParamArray Parameters() As Object) TExec(Subname, Parameters) End Sub Public Sub ThreadExecute(ByVal Subname As DSparam4, ByVal ParamArray Parameters() As Object) TExec(Subname, Parameters) End Sub Private Sub TExec(ByVal Deleg As Object, ByVal Parameters() As Object) TData.Clear() TData.Add(False) TData.Add(Deleg) If IsArray(Parameters) Then TData.AddRange(Parameters) Dim t As New Threading.Thread(AddressOf EXECTHREAD) t.IsBackground = True t.Start() Do While TData(0) = False Threading.Thread.Sleep(100) Loop End Sub Private Sub EXECTHREAD() '0 = started '1 = delegate '2 - inf = parameters TData(0) = True If TData(1).GetType.Name = "DSparam0" Then CType(TData(1), DSparam0)() If TData(1).GetType.Name = "DSparam1" Then CType(TData(1), DSparam1)(TData(2)) If TData(1).GetType.Name = "DSparam2" Then CType(TData(1), DSparam2)(TData(2), TData(3)) If TData(1).GetType.Name = "DSparam3" Then CType(TData(1), DSparam3)(TData(2), TData(3), TData(4)) If TData(1).GetType.Name = "DSparam4" Then CType(TData(1), DSparam4)(TData(2), TData(3), TData(4), TData(5)) End Sub #End Region
Now I want to decrease the coding size some more, and therefore my question:
How can I specify multiple types for a byval parameter in a sub?
At this point it overloads the other subs to get the desired amount of needed parameters. (max is 5 atm). I want to do this without overloading.
As example the following two subs:
I want to change that to, for example, this:Code:Public Sub ThreadExecute(ByVal Subname As DSparam1, ByVal ParamArray Parameters() As Object) TExec(Subname, Parameters) End Sub Public Sub ThreadExecute(ByVal Subname As DSparam2, ByVal ParamArray Parameters() As Object) TExec(Subname, Parameters) End Sub
How can I do that?Code:Public Sub ThreadExecute(ByVal Subname As [DSparam1 or DSparam2], ByVal ParamArray Parameters() As Object) TExec(Subname, Parameters) End Sub




Reply With Quote
