Red de conocimiento informático - Computadora portátil - Preguntas sobre programación de red C# y subprocesos múltiples, por favor denme algún consejo

Preguntas sobre programación de red C# y subprocesos múltiples, por favor denme algún consejo

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

2. El código de otros subprocesos no puede operar directamente los controles en el subproceso de la interfaz de usuario. Requiere el uso de delegación.

No tengo muy claras tus necesidades específicas. Pero déjenme asumir un ejemplo aquí:

Por ejemplo, tengo un programa de compra de boletos que debe ir al servidor para solicitar la cantidad restante de boletos cada 2 segundos. mostrado en la interfaz.

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

Entonces el código se puede escribir así: usando?System;

usando?System.Collections.Generic;

usando?System.ComponentModel;

usando?System.Data;

usando?System.Drawing;

usando?System.Text;

usando?System.Windows .Forms;

usando?System.Threading;

espacio de nombres?WindowsFormsApplication1

{

público ?partial?class?Form1?: ?Form

{

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

private?BackgroundWorker?bg?=?new?BackgroundWorker();

//Delegate, utilizado para cambiar la visualización de la interfaz

private?delegate?void ? delegadoSetCounter(int?count);

public?Form1()

{

InitializeComponent();

//Establecer BackgroundWorker Cosas que hacer

bg.DoWork? =?new?DoWorkEventHandler(bg_DoWork);

//Configurar BackgroundWorker para admitir subprocesos de interrupción

bg.WorkerSupportsCancellation? ?true;

}

//La parte principal de lo que tiene que hacer el hilo

private?void?bg_DoWork(object?sender,?DoWorkEventArgs? e )

{

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

while?(true)

{

//Salir si el hilo se cancela

if?(bg.CancellationPending)

return;

//Utiliza números aleatorios aquí para obtener y simular Obtener datos de la base de datos

Random?r?=?new?Random(DateTime.Now.Second);

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

//Delegar, asociar función DoSetCounter

delegateSetCounter?sc?=?new?delegateSetCounter(DoSetCounter);

//Pasar en los votos restantes Delega parámetros y llama de forma asincrónica

this.BeginInvoke(sc, count);

//Pausa durante 2 segundos cada vez

Thread.Sleep (2000);

}

}

//La parte delegada simplemente muestra el valor pasado en una etiqueta en la interfaz

private?void?DoSetCounter(int?i_count)

{

lblCounter.Text?=?string.Format("{0} votos restantes",?i_count);

lblCounter.Text?=?string.Format("{0} votos restantes",?i_count);

p>

}

// El hilo comienza a ejecutarse. Si necesita abrir el programa, simplemente colóquelo en el evento Load.

privado?void?btnStart_Click(object?sender,?EventArgs?e)

{

bg.RunWorkerAsync();

}

//Pausa del hilo, si no necesita pausar, no lo use. Aquí hay solo una descripción del uso.

private?void?btnStop_Click(object). ?sender,?EventArgs?e)

{

bg.CancelAsync();

}

//Detener el hilo cuando el formulario está cerrado

¿protegido? override?void?OnFormClosing(FormClosingEventArgs?e)

{

base.OnFormClosing(e);

bg.CancelAsync();

}

}

}

Después de ejecutar, haga clic en el botón de cambio que hicimos "Iniciar "

Comenzará en la etiqueta Mostrar un número aleatorio de votos cada 2 segundos.

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

Un ejemplo de mecanografía puramente manual. . . Gracias por adoptar