J'appelle un exécutable en C#. Lorsque l'exécutable s'exécute, il écrit sur la console afin que le code C# obtienne la sortie de la console et l'écrit dans un fichier texte. Lorsque l'accident se produit, deux ou trois choses se produisent.Appeler un exécutable en utilisant le processus se bloque par intermittence
1) La sortie du fichier texte n'est pas complètement écrite. 2) Le processus exécutable semble fonctionner complètement car il génère un rapport comme une exécution réussie.
Je soupçonne que la raison de cet accident est en raison de la façon dont j'écris le fichier.
Mise à jour: - En ce qui concerne le crash, une boîte de dialogue s'affiche disant que le "Gestionnaire a rencontré un problème et doit fermer." Nous sommes désolés pour le désagrément. " Ensuite, il a un bouton OK. Lorsque vous cliquez sur OK, une boîte de dialogue que j'ai paramétrée vous demande si je veux redémarrer le gestionnaire.
- L'application de gestionnaire qui appelle l'exécutable est à un seul thread. L'exécutable peut être multithread.
Voici un petit extrait de l'appel:
// Set up process to redirect standard output and standard error to
// a file.
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
FileInfo ofi = new FileInfo(outputPath);
FileStream ofs = ofi.OpenWrite();
StreamWriter sw = new StreamWriter(ofs);
WriteToTextWriterEventHandler wtsweh = new WriteToTextWriterEventHandler(sw);
DataReceivedEventHandler handler = wtsweh.HandleDataReceived;
process.OutputDataReceived += handler;
process.ErrorDataReceived += handler;
//
statusAcceptor.ReportStatus("Running process.");
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
statusAcceptor.ReportStatus("Waiting for process to complete.");
process.WaitForExit();
int processExitCode = process.ExitCode;
process.Close();
sw.Close();
//
private class WriteToTextWriterEventHandler
{
private TextWriter tw;
public WriteToTextWriterEventHandler(TextWriter tw)
{
this.tw = tw;
}
public void HandleDataReceived(object sendingProcess,
DataReceivedEventArgs outLine)
{
// Collect the sort command output.
if (!String.IsNullOrEmpty(outLine.Data))
{
tw.Write(Environment.NewLine + outLine.Data);
}
}
}
étiquette de filetage, mais aucune mention de filetage? – leppie
Pourriez-vous être plus précis concernant l'accident s'il vous plaît? (et je suis d'accord avec lepie sur la balise de filetage) –