Когда вы говорите, что неблокирование, я немедленно исключаю класс MessageBox (предполагая, что под неблокированием вы подразумеваете немодальный диалог?).
Вместо этого вы можете создать Окно, которое является вашей собственной реализацией MessageBox. Чтобы сделать его немодальным, вы вызываете метод Show (). Затем вы можете просто установить 20-секундный таймер для вызова метода close:
DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();</p>
<pre><code>//Constructor
public MyMessageBox()
{
timer.Interval = TimeSpan.FromSeconds(20d);
timer.Tick += new EventHandler(timer_Tick);
}
public new void Show()
{
base.Show();
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
//set default result if necessary
timer.Stop();
this.Close();
}
Выше предполагается, что вы создали класс с именем MyMessageBox, который наследуется от Window.