c# - tabla - Orden de precedencia con métodos?
tabla de tiempos mas cercanos (5)
El primer caso.
Dejemos los hilos fuera de este por un momento, particularmente porque no están involucrados en su escenario.
Estás hablando de propiedades y métodos, pero debajo de todo, son solo funciones. Cuando una función invoca a otra, el control en su programa se transfiere a la función llamada. Cuando esa función termina de ejecutarse, el control vuelve al punto donde se llamó. Su programa recuerda automáticamente a dónde debe volver, sin importar cuán profundamente las funciones llamen a más funciones. *
Cuando su segunda función establece el índice, lo que realmente sucede es que el compilador traduce la operación del conjunto de propiedades en una llamada a función. (Las propiedades son, en última instancia, solo "azúcar sintáctico" para las funciones). Esa función llama a muchas otras funciones que no son importantes para el escenario, excepto que una de ellas es la que invoca el controlador de eventos "index changed". Ve que tiene un método asociado con ese evento y llama a su primer método.
Su primer método se ejecuta y, cuando finaliza, vuelve a la función "invocar el controlador de eventos modificado por índice". Eventualmente, esa y todas las otras funciones sin importancia terminan ejecutándose (quizás después de hacer más llamadas a funciones en secuencia), y la función "establecer la propiedad del índice" devuelve el control a su segundo método.
Puede probarse a sí mismo que su primera sugerencia es cómo funciona. Muestre un cuadro de mensaje en su primer método y visualice otro cuadro de mensaje después del punto en su segundo método donde establece la propiedad del índice. (¡Use mensajes diferentes!) Debería ver aparecer el primer mensaje, y después de cerrar el cuadro de mensaje, debería ver aparecer el segundo mensaje, mostrando así que el segundo método no continuó ejecutándose mientras se estaba ejecutando el primero.
*
Hay un límite, pero rara vez se acelera a menos que haya un error en su programa. Cuando tiene demasiadas llamadas de función anidadas, lo que sucede es un desbordamiento de pila .
Digamos que tengo 2 métodos. Uno es un método desencadenado por el cambio del índice seleccionado en el cuadro de lista. El segundo método ayuda al borrar todos los cuadros de texto, establecer el índice de cuadro de lista en -1 y establecer el foco.
Pregunta:
El método dos se ejecuta, durante el código cambia el índice seleccionado del cuadro de lista a -1, lo que activa el activador del evento para el primer método. ¿El Método 2 HALT es su propia ejecución y transfiere el proceso al evento, y luego vuelve a su trabajo después de que el Método 1 finaliza ... O el método 2 termina su bloque de código completo y luego transfiere al Método 1 desde que cambia el índice seleccionado?
Hay una tercera alternativa que puede explorar: ¡también pueden ejecutarse al mismo tiempo ! Si entiendo su pregunta correctamente, el método 2 se desencadenará por el evento de cambio de índice. En una aplicación C # Windows Forms, este otro evento ocurriría en un hilo de ejecución separado.
Conceptos para explorar: enhebrar.
Espero que esto te dé un punto de partida en tus exploraciones de conocimiento.
Supongo que el idioma en cuestión es c # y, por lo tanto, tienes un lenguaje que admite varios hilos. Si no quieres preocuparte por los hilos (lo cual sería una mala idea si consideras la experiencia del usuario), puedes ejecutar tu GUI en un hilo y tener el mismo comportamiento, a menos que los componentes creen su propio hilo (que sería un poco aunque extraño). Si desea lograr una ejecución asincrónica (paralela) del evento, debe tener el evento desencadenante en su propio hilo.
Para responder a su pregunta: si no está utilizando varios hilos, el método desencadenado por el evento se pondrá en cola. Esto es exactamente lo que sucede cuando ve que la GUI responde lentamente en algunos programas.
Espero que despejó las cosas y la bienvenida de otro recién llegado :)
Suponiendo que no hay una situación de múltiples hilos, el evento se disparará antes de que finalice la ejecución del método. Si desea ver esto, codifique lo que ha sugerido en un lenguaje .NET y examine el Il producido. Puede hacer esto con ILDASM, o Reflector, o incluso crear su propia aplicación de actualización. Debe comprender la sintaxis de IL lo suficiente para ver la rama, pero no es tan difícil, siempre que comprenda los conceptos de programación.
Rob ha etiquetado este "azúcar sintáctico", con lo que estoy de acuerdo un tanto. Es realmente un truco de compilación, pero creo que cae bajo la etiqueta "azúcar sintáctica", ya que se utiliza comúnmente.
Yo mismo soy un principiante, tal vez puedo ayudar. Method2 se activaría, luego, cuando la selección cambie, Method1 haría lo suyo, y luego Method2 continuaría.
Si no desea que el Método1 se active en ese momento, es posible que desee hacer algo como: (REALMENTE, pseudo código)
Method2(object sender, System.EventArgs e)
{
//Unsubscribe Method1 from ListboxEvent
Listbox.OnSelectionChange -= Method1;
... Stuff Method2 actually does ...
Manualy call Method1 if you want it to fire
//Subscribe Method1 from ListboxEvent
Listbox.OnSelectionChange += Method1;
}
Probablemente no sea óptimo (y tal vez algunas mejores prácticas ...) pero por falta de una mejor explicación, al menos tiene un poco de información para ayudarlo a buscar. ¡Espero eso ayude!