elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Pasar el nombre de una subrutina como argumento de una función?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pasar el nombre de una subrutina como argumento de una función?  (Leído 1,316 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Pasar el nombre de una subrutina como argumento de una función?
« 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.  


« Última modificación: 18 Abril 2013, 15:27 pm por EleKtro H@cker » En línea


Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Pasar el nombre de una subrutina como argumento de una función?
« Respuesta #1 en: 19 Abril 2013, 19:45 pm »

¿Nadie sabe como se puede hacer?


En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines