Καταρχάς σας ευχαριστώ πολύ γιατί η βοήθειά σας ήταν καθοριστική και με καθοδήγησε ώστε να ξεκαθαρίσω πολλά θέματα.
Το αρχικό μου πρόβλημα ήταν όντως τα διαφορετικά threads. Ο λόγος που δυσκολεύτηκα να το βρω είναι διότι το visual studio ΔΕΝ έβγαζε exception και γινόταν kill της εφαρμογής χωρίς καμία αναφορά σφάλματος. Αν είναι θέμα ρυθμίσεων VS, του έχω τις τυπικές ρυθμίσεις εγκατάστασης.
Μάρκο ουσιαστικά αυτόν τον τρόπο χρησιμοποιώ αλλά με τα χρήσιμα link που έδωσες έμαθα και για το πολύ ενδιαφέρον RedirectStandardOutput. Παραθέτω το κομμάτι κώδικα και για άλλους χρήστες:
class starteplus
{
public string StartEplus(string
arguments)
{
//Νέα process
Process
myProcess = new Process();
ProcessStartInfo
psi = new ProcessStartInfo();
//Όνομα εφαρμογής
psi.FileName = @"c:\eplus\RunEPlus.bat";
//Παράμετροι
εφαρμογής
psi.Arguments = filename;
Directory.SetCurrentDirectory(@"c:\Test5\eplus1\");
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
//Κρύβει
το dos window
psi.CreateNoWindow = true;
myProcess.StartInfo = psi;
myProcess.Start();
myProcess.WaitForExit();
string result =
myProcess.StandardOutput.ReadToEnd();
return result;
}
}
Αυτά που διαβάζονται από το StandardOutput.ReadToEnd() είναι stream. Με τον παραπάνω τρόπο διαβάζεται το σύνολο του stream αφού τελειώσει και επιστρέφει ως string. Επειδή με αυτό τον τρόπο δεν γίνεται καμία ενέργεια έως ότου να τελειώσει η myprocess (και μπορεί να πάρει αρκετό χρόνο), πως μπορώ να παίρνω γραμμή-γραμμή και να τα δείχνω στο gui μου ή σε άλλο παράθυρο (δηλαδή αυτά που θα έδειχνε σε dos shell να τα δείχνει στο gui καθώς εξελίσσονται)?