Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Eleкtro en 18 Abril 2013, 15:21 pm



Título: Pasar el nombre de una subrutina como argumento de una función?
Publicado por: Eleкtro en 18 Abril 2013, 15:21 pm
Hola

Estoy intentando crear una función genérica para crear Threads.

El problema es que no consigo pasarle a la función el nombre de un Sub como argumento, para poder asignarlo como el Sub del nuevo thread que se va a crear,
sólamente he llegado a conseguir pasarle el nombre de una función, lo cual no me sirve para nada, porque según me dice la IDE el procedimiento de un thread debe ser un Sub, no una función.

¿Tienen idea de como puedo conseguir resolverlo?

Me gustaría poder pasarle el nombre del Sub a la función sin tener que declarar un delegado fuera de la función, porque mi intención es hacer una función genérica que acepte cualquier nombre de un Sub como argumento, para simplificar las cosas.

El code:
Código
  1.    Public Class Form1
  2.  
  3.    ' Desired usage:
  4.    ' Make_Thread(Thread Variable, Thread Name, Thread Priority, Thread Sub)
  5.    '
  6.    ' Example:
  7.    ' Make_Thread(Thread_1, "Low thread", Threading.ThreadPriority.Low, AddressOf Test_Sub)
  8.  
  9.    Private Thread_1 As Threading.Thread ' Thread Variable
  10.  
  11.    Private Function Make_Thread(Of TKey)(ByRef Thread_Variable As Threading.Thread, _
  12.                           ByVal Thread_Name As String, _
  13.                           ByVal Thread_Priority As Threading.ThreadPriority, _
  14.                           ByRef Thread_Sub As Func(Of String, TKey)) As Boolean ' I'd ByRef a function but really I will pass a Subroutine.
  15.  
  16.        ' See if the thread is already running.
  17.        Dim is_running As Boolean
  18.        If Thread_Variable Is Nothing Then _
  19.             is_running = False _
  20.        Else is_running = Thread_Variable.IsAlive
  21.  
  22.        ' If the thread is already running, do nothing.
  23.        If is_running Then Return False : Exit Function
  24.  
  25.        ' Make the thread.
  26.        Thread_Variable = New Threading.Thread(AddressOf Thread_Sub)
  27.        Thread_Variable.Priority = Thread_Priority
  28.        Thread_Variable.IsBackground = True
  29.        Thread_Variable.Name = Thread_Name
  30.  
  31.        ' Start the thread.
  32.        Thread_Variable.Start()
  33.        Return True
  34.  
  35.    End Function
  36.  
  37.    Private Sub Test_Sub()
  38.        MsgBox("A message from the thread!")
  39.    End Sub
  40.  
  41.    End Class
  42.  


Título: Re: Pasar el nombre de una subrutina como argumento de una función?
Publicado por: Eleкtro en 19 Abril 2013, 19:45 pm
¿Nadie sabe como se puede hacer?