Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C#] Il programma non funziona senza punti di interruzione

    Prima di postarvi varie parti di codice che non so se sarà utile.
    Sto scrivendo un'applicazione che si appoggia sue due dll scritte sempre da me.
    Altre applicazione che si appoggiano su quelle dll funzionano.
    L'applicazione in questione, un Windows Form, semplicemente parte "in background" per poi comparire all'attivazione di un evento, il tutto è collegato a delle TAPI.
    L'applicazione in questione mi funziona perfettamente se nell'esecuzione del codice in modalità di debug ho inserito almeno un punto di interruzione.
    Se lo eseguo senza punti di interruzione sembra non partire mai l'evento che mi visualizza il form.
    Se eseguo invece l'eseguibile generato dal progetto il risultato è ancor più contrastante. Infatti prima di oggi ( cioè prima che effettuassi due correzioni al codice) mi partiva, oggi invece no.
    Ho provato a ripescare la versione prima delle ultime modifiche e mi è partita, ho provato in un secondo momento a riavviarla e ha fatto come l'ultima versione.
    Adesso non riesco a far funzionare né l'una né l'altra.
    Nell'applicazione faccio uso di thread.
    Se necessitate di altre informazioni per darmi un aiuto, vi fornirò il più possibile.
    Grazie dell'aiuto a chiunque se ne interessi.

    Saluti!
    Teologia: l'arte di argomentare l'inesistente per mezzo dell'insostenibile.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Dobbiamo parlare commentando il codice, specialmente nella parte dell'evento che fa partire il programma e alla creazione del thread ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    codice:
    public tapicom tapi;
            public Thread tapi_thread;
            public delegate void delegatesearch(string pcaller);
            //...altre variabili
            //costruttore
            public frm_whois()
            {
                InitializeComponent();
                //...altre variabili
                this.tapi_thread = new Thread(new ThreadStart(this.listen));
                this.tapi_thread.Start();
            }
            //metodo chiamato da thread
            public void listen()
            {
                while (this.tapi_thread.ThreadState == ThreadState.Running)
                {
                    if (this.tapi.tpc_callinfo == "OFFERING")
                    {
                        this.search(this.tapi.tpc_caller);
                        this.tapi_thread.Suspend();
                    }
                }
            }
    il thread chiama listen e ascolta l'evento, è una telefonata, al che il lavoro passa alla dll e ritorn il chiamante che viene cercato. search fa la query e mostra il form, ma a questo punto pare non arrivarci mai senza punti di interruzione.


    aggiungo una nota rilevante:
    dato che questa applicazione non si chiude al clic sulla x, perchè ho riscritto l'evento form_closing per far nascondere il form ma per lasciarlo attivo
    ho sovrascritto nel form il metodo WndProc come segue.
    codice:
    protected override void WndProc(ref Message m)
            {
                const int WM_QUERYENDSESSION = 17;
    
                try
                {
                    switch (m.Msg)
                    {
                        case WM_QUERYENDSESSION:
                            this.to_kill = true;
                            this.Close();
                            break;
                        default:
                            break;
                    }
                    base.WndProc(ref m);
                }
                catch (Exception exc)
                {
                    lib.alert(exc.Message);
                }
            }
    ho notato però che parallelamente al thread questo metodo è sempre in ascolto, non vorrei che anche questo crei problemi, dato che questa è una delle correzioni apportate oggi.
    Teologia: l'arte di argomentare l'inesistente per mezzo dell'insostenibile.

  4. #4
    any suggeston?
    Teologia: l'arte di argomentare l'inesistente per mezzo dell'insostenibile.

  5. #5
    Allora, onestamente dal codice che hai postato nn saprei darti nessun consiglio, dovrei vederlo tutto ma immagino sia 1 sacco e comunque non sono certo che ti saprei comunque aiutare perche' ognuno ha 1 metodo diverso di programmare, di creare thread etc etc, xo' da quello che ho letto dal tuo primo post mi pare di capire che il problema sia di concorrenza e cioe' puo' essere che 1 thread parta "prima" di 1 altro e qndi si incasini tutto? hai guardato che nn ci siano variabili o qlsiasi altra cosa (nel tuo caso mi pare di capire il metodo che ti ritorna visibile il form) che vengono utilizzate da + thread contemporaneamente? forse nn centra niente xo' mi pare che sia 1 problema che potresti risolvere con dei "semafori", ora dimmi tu se ti pare che centri qlks qst soluzione e se si ti do 1 mano 1 po + concreta altrimenti prova a spiegare ankora è nel dettaglio il problema
    Zeroradio V2.. Dove Trovi di Meglio???

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.