VB.NET multiproceso simple
En general, no se recomienda utilizar subprocesos múltiples, porque si hay obstáculos entre subprocesos, habrá competencia al disfrutar de los recursos y es necesario agregar bloqueos para manejarlos; No hay relación de tiempo entre subprocesos, por lo que al depurar el procesamiento asincrónico, el orden en que finaliza el procesamiento puede ser inconsistente con el orden en que comienza el procesamiento (el autor ya descubrió este problema durante la depuración).
Para resolver el problema que planteó, utilizamos subprocesos múltiples utilizando el control de procesamiento asincrónico BackgroundWorker.
El código ha sido depurado y aprobado. Bienvenido a comunicarse. Si tiene alguna pregunta, deje QQ u otra información de contacto.
El código es el siguiente, con una captura de pantalla del programa adjunta.
'------------------------------------------ --- ---------
¿Importaciones?System.ComponentModel?'Importar espacio de nombres de control asíncrono
Público?Clase?Form1
Privado ?¿Cuántos ?As?Integer?=?10
Privado?Número de análisis (0?A?¿Cuántos?-?1) como trabajador en segundo plano
Subbotón privado1_Click(ByVal remitente?Borrar ()
creatNewBackgroundWorker()
addHandle()
startWork()
Fin?Sub
Privado ?Sub ?creatNewBackgroundWorker()
For?i?As?Integer?=?0?To?AnalysisNumber.Length?-?1
AnalysisNumber(i) =?New?BackgroundWorker p>
Siguiente
Fin?Sub
Privado?Sub?addHandle()
Para?i?As?Integer?=?0 ?A ?AnalysisNumber.Length?-1
AddHandler?AnalysisNumber(i).DoWork, DirecciónDe?AnalysisNumber_DoWork
AddHandler?AnalysisNumber(i).RunWorkerCompleted, ?DirecciónDe?AnalysisNumber_RunWorkerCompleted p>
Siguiente
Fin?Sub
Privado?Sub?startWork()
Para?i.As Entero =?0?A?9 p>
¿Dim?temp(0?To?9)?As?Integer
For?j?As?Integer?=?1?To?10
temp( j?-?1)?=10 * i j
Siguiente
AnalysisNumber(i).RunWorkerAsync(temp)
Siguiente
End?System.ComponentModel.DoWorkEventArgs)
Dim?data?As?Integer()
data?=?CType(e.Argument,?Integer()) p>
¿Dim?temp?As?Integer
Para?i?As?Integer?=?1
temp=data(i)
datos( i)=temp*temp
Siguiente
e.Result=datos
Fin?Sub
Privado?Sub?AnalysisNumber_RunWorkerCompleted (ByVal ?remitente?Como?Objeto,?ByVal?e?Como?Sys
tem.ComponentModel.RunWorkerCompletedEventArgs)
Dim?data?As?Integer()
data?=?CType(e.Result,?Integer())
Para?i?As?Integer?=?1
ListBox1.Items.Add(data(i))
Siguiente
Fin?Clase p>