VB.NET es compatible con los delegados anónimos, pero sólo como funciones de un único estado. (instrucción múltiple funciones anónimas y anónimos Sub
s se han añadido a VB10 en .NET 4)
para proporcionar el contexto, DoEvents
fue diseñado para permitir un entorno de un solo subproceso para actualizar los otros mensajes de Windows de interfaz de usuario y de proceso mientras que el trabajo era Siendo hecho. No debería haber ningún beneficio al llamar al DoEvents
(o, como lo está haciendo aquí, hacerlo indirectamente al ejecutar una función "nula" en el despachador) desde otro subproceso, ya que el subproceso de interfaz de usuario debería actualizarse por sí mismo.
Con el fin de responder a su pregunta, sin embargo, la opción más fácil sería algo como esto:
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, _
New Action(Function() 7))
Pero, de nuevo, no puedo ver lo que esto realmente lograr.
Si lo que está buscando es simplemente cómo ejecutar código en el hilo de la interfaz de usuario (como el Control.Invoke
de formularios de Windows), entonces Dispatcher.Invoke
(que es lo que está usando) es correcto, solo tendrá que traduzca sus métodos anónimos en línea en funciones discretas y páselos como delegados. Puede haber algunos con los que puede salirse con el anonimato. Por ejemplo, si todo lo que está haciendo es la actualización de una barra de progreso, que podría hacer:
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, _
New Action(Function() progressBar.Value = 100))
Esto funciona porque todas las asignaciones devuelven el valor que se almacena en el lado izquierdo de la asignación. Se podría, sin embargo, acaba de llamar a un sub como esto (la siguiente no se compilará a menos SomeFunctionName
devuelve un valor):
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, _
New Action(Function() SomeFunctionName(params)))
En otras palabras, cualquiera de los delegados anónimos que se encuentran en el código C# que sea :
- son más de una sentencia
- no devuelven un valor (lo que significa que sólo una sola llamada a un método, no una función)
entonces te h para crear funciones para aquellos y pasar delegados a esas funciones en lugar de escribir el código como lo hace en C#.
DoEvents? Creo que solían utilizar DoEvents en VB6, antes de que las personas se dieran cuenta de que una aplicación podría tener algo más que el hilo de UI. – Will
Bueno, la convención moderna es usar Thread.Sleep (1) o similar, pero esto no funciona cuando necesita saltar de un hilo temporalmente para permitir que la interfaz de usuario se actualice y permanezca en el medio de un ciclo de procesamiento en WPF. – NibblyPig
@SLC: si está procesando en otro hilo, entonces no debería necesitar decirle a la interfaz de usuario que se actualice solo (en una especie de actualización general). –