PDA

View Full Version : c# processo che blocca programma


millennio
03-05-2011, 10:31
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents=false;
proc.StartInfo.FileName="ffmpeg";
proc.StartInfo.Arguments = " -i " + ultimo_file + " -target pal-dvd " + percorsoMPEG + zeri + numfiles2 + "_" + lbldataeora.Text + ".mpg";
proc.Start();
proc.WaitForExit();

Quando finisco l'acquisizione di un file .avi parte questo processo che mi converte da .avi a .mpg , ma il problema è che non posso fare partire un'altra acquisizione, perchè il programma si freeza fino alla fine del processo, come posso risolvere?

Grazie

Kralizek
03-05-2011, 10:37
Prova ad usare la TPL per spawnare un altro thread.

Task.Factory.CreateNew(() =>
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents=false;
proc.StartInfo.FileName="ffmpeg";
proc.StartInfo.Arguments = " -i " + ultimo_file + " -target pal-dvd " + percorsoMPEG + zeri + numfiles2 + "_" + lbldataeora.Text + ".mpg";
proc.Start();
proc.WaitForExit();
});

ovviamente questo é solo un suggerimento di massima, ci devi ricamare un po' intorno per avere ciö che ti serve ;)

millennio
03-05-2011, 10:43
Provato ma mi restituisce:

Errore 4 Il nome 'Task' non esiste nel contesto corrente

Kralizek
03-05-2011, 10:45
devi usare


using System.Threading.Tasks;


e .NET 4

millennio
03-05-2011, 11:10
Il .net 4 posso usarlo anche in VS2008 ?

giangian2
03-05-2011, 13:09
Il .net 4 posso usarlo anche in VS2008 ?

No solo su VS2010

millennio
05-05-2011, 09:20
Task.Factory.CreateNew(() =>
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents=false;
proc.StartInfo.FileName="ffmpeg";
proc.StartInfo.Arguments = " -i " + ultimo_file + " -target pal-dvd " + percorsoMPEG + zeri + numfiles2 + "_" + lbldataeora.Text + ".mpg";
proc.Start();
proc.WaitForExit();
});
non funziona, allora ho provato ha sostituire
CreateNew
con
StartNew
e con questo funziona solamente la prima volta, ma tutte le altre no, per farlo andare devo chiudere il programma.... come mai?