我有一个线程,在这个线程中我调用一个需要很长时间才能处理的方法。
该方法使用foreach
为每次迭代使用计数器(计数器++)
我想这样做:
foreach
内,如果计数器> 20:
process.start(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;
}
答案 0 :(得分:0)
嗯,有两件事:
因为你是在一个单独的线程上做这件事:
// DO THE CHECK HERE, EACH 3 MINUTES (TIMER) !!!! HOW ????????
if (contador > 20) { ... }
您可以轻松地阻止线程进行3分钟检查,而不是使用计时器。一个简单的Thread.Sleep(180000);
会使你的循环延迟3分钟。
话虽如此,我怀疑这是否真的是解决这个问题的最佳方法。由于您自己启动了该过程,因此可以将处理程序附加到Process.Exited
事件,并在退出后“重新启动”该过程。这将消除对循环,检查甚至整个单独线程的整个需求。只需启动该过程,当它存在时,重新启动它(20x)。