我有个问题。我想在我的应用程序中使用 backgroundworker,但我不知道该怎么做。我的应用程序需要很长时间才能执行某些验证,完成后,它会被冻结。我的想法是放置一个取消验证按钮。我怎么能做到?这是我的代码,整个过程到此完成。
void Listar()
{
try
{
CN_Guias guias = new CN_Guias();
DateTime Hoy = DateTime.Today;
string fecha_actual = Hoy.ToString("dd/MM/yyyy");
string mes, año;
mes = txt_mes.Text;
año = txt_anno.Text;
if (txt_ruta.Text == "")
{
MessageBox.Show("Ingresar Ruta por favor.!!!", "Ingresar Datos", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else if (txt_mes.Text == "")
{
MessageBox.Show("Ingrese el Mes por favor.!!!", "Ingresar Datos", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else if (txt_anno.Text == "")
{
MessageBox.Show("Ingrese el Año por favor.!!!", "Ingresar Datos", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
DataTable dtImagenes =
guias.Listar_Guias_xMes_xAño(Convert.ToInt32(mes),
Convert.ToInt32(año));
int cantidad_imagen_db = dtImagenes.Rows.Count;
pgb_cargando.Visible = true;
pgb_cargando.Maximum = cantidad_imagen_db;
pgb_cargando.Step = 1;
pgb_cargando.Value = 0;
//INICIO FOR
btn_listar.Enabled = false;
txt_mes.Enabled = false;
txt_anno.Enabled = false;
foreach (DataRow row in dtImagenes.Rows)
{
string nom_imagen_db = row["NroGuia"].ToString().TrimEnd(' ');
string[] archivos = Directory.GetFiles(txt_ruta.Text, nom_imagen_db + ".*");
string[] archivos2 = Directory.GetFiles(txt_ruta.Text, nom_imagen_db + "_*");
if (pgb_cargando.Value <= cantidad_imagen_db)
{
pgb_cargando.PerformStep();
}
if (archivos.Length == 0 && archivos2.Length==0) {
string f_guia = row["FechaGuia"].ToString();
guias.InsertarGuiasValidadas(nom_imagen_db,
Convert.ToDateTime(f_guia),
DateTime.Now, "NO");
}
}
MessageBox.Show("Se realizo la validación correctamente");
btn_listar.Enabled = true;
txt_mes.Enabled = true;
txt_anno.Enabled = true;
Limpiar();
//FIN FOR
//btn_validar.Enabled = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
我希望你能帮助我。谢谢。
该类允许您在专用的独立
BackgroundWorker
设备上运行操作。subproceso
下载和数据库事务等耗时的操作可能会导致用户界面(UI)在运行时看起来好像已停止响应。如果您想要IU
动态并且遇到与这些操作相关的长时间延迟,则该类BackgroundWorker
提供了合适的解决方案。要在后台运行慢速操作,请创建一个
BackgroundWorker
并侦听报告操作进度的事件以及操作完成时的信号。您可以通过BackgroundWorker
编程方式创建或将其从工具箱的“组件”选项卡拖到表单上。如果BackgroundWorker
在 Designer 中创建Windows Forms
,它将出现在组件托盘中,并且其属性将显示在属性窗口中。要设置后台操作,请为 event 添加事件处理程序
DoWork
。在此事件处理程序中调用耗时操作。要开始操作,请调用RunWorkerAsync
。要接收进度更新通知,请监视事件ProgressChanged
。要在操作完成时收到通知,请处理事件RunWorkerCompleted
。您必须将要执行的操作放在函数中
DoWork
并启动BackgroundWorker
它,以便它异步工作backgroundWorker1.RunWorkerAsync();
:如果您想了解更多信息,我会将消息来源留给您。