Witam, mam przykładową metodę button1_Click odpalaną w wątku GUI aplikacji, która powinna zaczekać aż przykładowy wątek thread zakończy swoje działanie. No i jeśli ten wątek przed swoim zakończeniem pechowo wywoła Invoke to będzie czekał, aż button1_Click się zakończy, czyli klasyczny deadlock.

private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(delegate()
{
try
{
this.Invoke((MethodInvoker)delegate()
{
this.Text = "Invoke";
});
}
catch {};
MessageBox.Show("MessageBox");
});
thread.Start();
thread.Interrupt(); // <--- !!!
thread.Join();
}


W takim przypadku rozwiązaniem jest dla mnie metoda <i>Interrupt</i>, która bardzo ładnie przerywa takie oczekiwanie i zmusza wątek do zakończenia.

Problem mam taki, że po wywołaniu <i>Interrupt</i> oczekujący na wywołanie delegat (z <i>Invoke</i>) nie jest mi już potrzebny, a jego uruchomienie jest wręcz niepożądane. 

<font size="2">Czy da się go jakoś anulować?</span>