
[英]Wait for application launch without using Thread.Sleep() using FLAUI
[英]Launch Application within a Thread using a Timer
我有一个线程,在这个线程中,我调用了一个处理时间很长的方法。
该方法有一个foreach
,每次迭代都使用一个计数器(counter ++)
我想做这个:
foreach
,如果counter> 20:
process.start(sendmailservice.exe);
启动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;
}
好,两件事:
由于您还是要在单独的线程上执行此操作:
// DO THE CHECK HERE, EACH 3 MINUTES (TIMER) !!!! HOW ????????
if (contador > 20) { ... }
您可以轻松地阻塞线程进行3分钟的检查,而不用使用计时器。 一个简单的Thread.Sleep(180000);
将使您的循环延迟3分钟。
话虽如此,我想问这是否真的是解决此问题的最佳方法。 由于您自己启动进程,因此可以将处理程序附加到Process.Exited
事件,并在退出后“重新启动”该进程。 这将消除对循环,检查的整个需求,甚至可能消除整个单独的线程。 刚开始的过程,当它存在,重新启动它(20X)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.