Red de conocimientos turísticos - Información de alquiler - ¿Qué es la programación en red y la programación multiproceso?

¿Qué es la programación en red y la programación multiproceso?

1. En este caso, el subproceso múltiple consiste, por supuesto, en colocar los pasos que requieren más tiempo y las partes del bucle en subprocesos.

2. El código en otros subprocesos no puede operar directamente los controles en el subproceso de la interfaz de usuario. Se requiere un director.

No tengo muy claras tus necesidades específicas. Pero déjame poner un ejemplo:

Por ejemplo, tengo un programa de compra de entradas y tengo que ir al servidor cada 2 segundos para solicitar los votos restantes. mostrado en la interfaz.

También hay operaciones como "venta de entradas" y "reembolso de entradas" en la interfaz. La interfaz es la siguiente:

Entonces el código se puede escribir así:

¿Usar? Sistema;

¿Uso? sistema. recolectar. Genéricos;

¿Uso? sistema. Modelo de componente;

¿Uso? sistema. Datos;

¿Uso? sistema. Dibujo;

¿Uso? sistema. Texto;

¿Usar? sistema. Formularios de Windows

¿Usar? sistema. Subprocesamiento;

¿Espacio de nombres? aplicación de formularios de Windows 1

{

¿Pública? ¿parte? ¿clase? ¿Forma1? :?Form

{

//BackgroundWorker es una clase de hilo bien encapsulada. Viene con. neto.

¿Privado? ¿Trabajador de fondo? bg? =?¿Nuevo? background work();

//Delegar para cambiar la visualización de la interfaz.

¿Privado? ¿Delegar? ¿Vacío? delegadoSetCounter(int? Count);

¿Público? Formulario 1()

{

inicializar componente();

//Establecer BackgroundWorker para que lo haga.

bg. ¿Doc? +=?¿Nuevo? DoWorkEventHandler(BG_DoWork);

//Establezca BackgroundWorker para admitir la interrupción de subprocesos.

bg. ¿Los trabajadores apoyan la cancelación? =?True;

}

//La parte principal que hará el hilo

¿Privado? ¿Vacío? bg_DoWork(Object? Sender? DoWorkEventArgs? e)

{

//Aquí se supone que el hilo se repite infinitamente.

¿Cuándo? (Correcto)

{

//Salir si el hilo se cancela.

¿Y si? (bg. Cancelar pendiente)

Regresar;

//Aquí, se utilizan números aleatorios para obtener datos y simular la obtención de datos de la base de datos.

¿Aleatorio? r? =?¿Nuevo? aleatorio(fechahora.ahora.segundos);

int? ¿Contar? =?r.Next(1,?100);

//Delegar, asociado a la función DoSetCounter

delegateSetCounter? ¿Carolina del Sur? =?¿Nuevo? delegadoSetCounter(contador de dosis);

//Pase los tickets restantes como parámetros al delegado y llámelo de forma asincrónica.

Esto. BeginInvoke(sc, count);

//Pausa el hilo durante 2 segundos cada vez

sleep(2000);

}

}

// En la parte delegado, simplemente muestra el valor pasado en una etiqueta en la interfaz.

¿Privado? ¿Vacío? DoSetCounter(int?i_count)

{

lblCounter. ¿Palabra? =?Cadena. Format("Quedan {0} tickets", I_count);

}

//El hilo comienza a ejecutarse. Si necesita abrir el programa, comience a ejecutarlo. Simplemente póngalo en el evento Load.

¿Privado? ¿Vacío? btnStart_Click(¿Objeto? ¿Remitente? EventArgs? e)

{

bg. RunWorkerAsync();

}

//El hilo está en pausa, si no es necesario, no es necesario. Esto es sólo para ilustrar el uso.

¿Privado? ¿Vacío? btnStop_Click(¿Objeto? ¿Remitente? EventArgs? e)

{

bg. CancelAsync();

}

//Detener el hilo al cerrar el formulario.

¿Protegido? ¿cubrir? ¿Vacío? al cerrar el formulario(FormClosingEventArgs?e)

{

Base. en el cierre del formulario(e);

bg. CancelAsync();

}

}

}Después de ejecutar, haga clic en el botón de cambio "Inicio" que creamos.

La etiqueta comienza a mostrar votos aleatorios cada 2 segundos.

Otros controles y operaciones en el hilo de la interfaz de usuario no se bloquearán ni bloquearán.

Ejemplos de escritura a mano. . . Gracias por la adopción