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.