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.