【发布时间】:2009-12-29 18:41:01
【问题描述】:
我有一个线程,在这个线程中我调用了一个需要很长时间处理的方法。
该方法有一个foreach,每次迭代都使用一个计数器(counter++)
我想这样做:
- 在
foreach内,如果计数器 > 20:- 检查是否有名称为“SendMailService.exe”的进程正在执行。
- 如果未执行,请使用
process.start(sendmailservice.exe);启动 - 如果执行等待 3 分钟再检查。
- 在 foreach 代码之后
- 检查是否有名称为“SendMailService.exe”的进程正在执行。
- 如果进程正在执行,请等待进程完成。
有人能理解我吗?任何帮助将不胜感激。
我的代码是:
private void bEnviarAleatorioSeleccionados_Click(object sender, EventArgs e)
{
CrossThreadCalls();
this.bEnviarAleatorioSeleccionados.Enabled = false;
// Threads werden erzeugt
Thread hiloMain = new Thread(
new ThreadStart(EnviarAleatorioSeleccionadosYEnviarCorreo));
hiloMain.Start(); // Threads werden gestartet
}
private void EnviarAleatorioSeleccionadosYEnviarCorreo()
{
string rutaFicheroMp3 = GetRutaFicheroMp3DeLoquendo(textoLoquendo);
int contador = 0;
foreach (ListViewItem item in lstRecientes.Items)
{
if (item.Checked)
{
contador++;
EnviarCorreoParaElementoListView(item, rutaFicheroMp3, item.Text);
}
// DO THE CHECK HERE, EACH 3 MINUTES (TIMER) !!!! HOW ????????
if (contador > 20)
{
var listaP = Process.GetProcesses().FirstOrDefault(
p => p.ProcessName == "ServicioEnvioCorreo.exe");
if (listaP == null)
{
// Iniciar Envio de Correo
EnviarCorreosPorProceso();
}
}
}
EliminarFicheroLoquendo(rutaFicheroMp3);
this.bEnviarAleatorioSeleccionados.Enabled = true;
}
【问题讨论】:
-
你应该用你使用的语言来标记它。
标签: c# multithreading process timer