Oppure

Loading
09/02/17 14:40
Thejuster
Salve ragazzi,
Forse a qualcuno è capitato un problema del genere.

Ho provato a chiedere anche ad amici ma non sono riusciti a trovarmi una soluzione.
Forse vi è capitato già qualcosa del genere e sapete come fare.

Vi spiego il mio problema.

Ho realizzato un Debugger interattivo per il mio progetto

cdn.discordapp.com/attachments/215894893866909696/278841652129562625/…

Il tutto gira sui NamedPipeServer che consente una sorta di comunicazione tra applicazione e processo.
Un pò come visual studio mostra le variabili e altri oggetti.

Il problema è questo.

Il debugger funziona bene, e fà bene il suo lavoro e per lo scopo che e stato programmato.
Ma nonostante io tenta di chiudere tutte le comunicazioni con il l'applicazione al cui il pipe è connesso
essa non sembra chiudersi.

in primis ho un eccezione al pipe drain


 //pipeServer.WaitForPipeDrain();
                    if (pipeServer.IsConnected) { pipeServer.Disconnect(); }



Come vedete ho commentato questa l'attesa che il pipe venga droppato.
perché la limitazione di questo processo è proprio quella di inviare una sola stringa per azione.
e siccome un debugger deve tener traccia di ogni viariabile, avere un sola stringa per volta non va bene.
quindi ho inserito un ciclo nel ciclo del pipe server.



 do
            {
      try {
         
  pipeServer.WaitForPipeDrain();

  // start inner loop
                    while (pipeServer.IsConnected)
                    {
                        //Esempio
test = sr.ReadLine();

  if(test.Contains("lightvalue"))
                        {
lightR = Math.Floor(l.Color1 == 1.0 ? 255 : l.Color1 * 256.0);
}

 // Comando di chiusura
                        if (test == "close")
                            pipeServer.Disconnect();

                    }
                catch (Exception ex) { throw ex; }
                finally
                {
                    //pipeServer.WaitForPipeDrain();
                    if (pipeServer.IsConnected) { pipeServer.Disconnect(); }
                }



Questo parte del mio codice,
Ho postato solo una parte giusto per mostrare il funzionamento del metodo.

Avviando la prima volta il debbuger, assieme al debugger parte anche il processo a cui
il pipe server si collega. e tiene traccia come nella screen di tutte le variabili e altre informazioni.

Ma riavviando una seconda volta il debug, si frezza tutto e non capisco il motivo perché accade questo.
il debugger di VS non mostra errori...

Per risolvere ciò
anche se chiudo tutti i form, il programma rimane avviato.
nonostante io abbia fermato il thread a cui il debugger viene azionato.

per chiudere il programma sono costretto ad usare

Application.ExitThread();
Environment.Exit();


Consigli?
mire.forumfree.it/ - Mire Engine
C# UI Designer
09/02/17 18:52
Ma il "do" dove si conclude?

L'indentazione è pessima ... non si capiscono i blocchi ...
14/02/17 7:36
Thejuster
Ho risolto nessun grazie ugualmente per l'interessamento.

In pratica, quando si crea un doppio ciclo in un thread separato e molto difficile tentarlo di chiuderlo.
nonostante io forza a chiudere l'applicazione.

Non il fatto che il thread non termina, ma il problema che rimane aperto il pipe server nonostante il thread
sia stato distrutto.

Sarà un bug di visual studio non saprei.

Ho risolto forzando il Grabage Collector a sopprimere e finalizzare l'oggeto form contenente tutte le sue operazioni correnti.
Un semplice Dispose non bastava e non funzionava.
Nemmeno forzare a chiudere un processo.

mire.forumfree.it/ - Mire Engine
C# UI Designer