




На уровне класса сделайте что-то вроде этого:
Timer timer = new Timer();
private int counter = 0;
В конструкторе сделайте так:
public Form1()
{
InitializeComponent();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
}
Затем ваш обработчик событий:
void timer_Tick(object sender, EventArgs e)
{
counter++;
if (counter == 5) //or whatever amount of time you want it to be invisible
{
this.Visible = true;
timer.Stop();
counter = 0;
}
}
Затем, где бы вы ни захотели сделать его невидимым (здесь я продемонстрирую это нажатием кнопки):
private void button2_Click(object sender, EventArgs e)
{
this.Visible = false;
timer.Start();
}
BFree опубликовал аналогичный код за то время, которое мне потребовалось, чтобы проверить это, но вот моя попытка:
this.Hide();
var t = new System.Windows.Forms.Timer
{
Interval = 3000 // however long you want to hide for
};
t.Tick += (x, y) => { t.Enabled = false; this.Show(); };
t.Enabled = true;
Таймеры реализуют IDisposable, вы должны это называть.
Я полагаю, вы могли бы вызвать Dispose () вручную из обработчика событий, но вы не смогли бы обернуть его в блок using (), иначе таймер будет удален до того, как он сработает, через три секунды.
Имейте в виду, что доступно несколько типов таймеров: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx
И не забудьте отключить таймер на время работы обработчика, чтобы не прерывать себя. Скорее смущает.
Быстрое и грязное решение с использованием укупорочных средств. Timer не требуется!
private void Invisibilize(TimeSpan Duration)
{
(new System.Threading.Thread(() => {
this.Invoke(new MethodInvoker(this.Hide));
System.Threading.Thread.Sleep(Duration);
this.Invoke(new MethodInvoker(this.Show));
})).Start();
}
Пример:
// Makes form invisible for 5 seconds.
Invisibilize(new TimeSpan(0, 0, 5));
Более чистый подход, чем у меня. +1