2016-03-27 3 views
0

どこでもこの質問に対する回答が見つかりませんでした。指定した時間(ミリ秒)の間、画像ボックスを表示するコマンドはありますか?私はthread.sleepまたはtask.delayを実行できることを知っています。しかし、これらの代替手段はありますか?置き換えられるもの:C#Windowsフォーム短時間で画像ボックスを表示

picturebox1.visible = true; 
thread.sleep(1000); 
picturebox1.visible = false; 

ありがとう!

+0

['Timer'](https://msdn.microsoft.com/en-us/library/system.windows.forms.timer(v = vs.110).aspx)を使用してください。 ) –

+0

あなたは 'Task.Delay'や' Thread.Sleep'を使ってみませんか? –

答えて

0
private void Form1_Load(object sender, EventArgs e) 
{ 
    picturebox1.visible = true; 
    Timer MyTimer = new Timer(); 
    MyTimer.Interval = (1000); 
    MyTimer.Tick += new EventHandler(MyTimer_Tick); 
    MyTimer.Start(); 
} 

private void MyTimer_Tick(object sender, EventArgs e) 
{ 
    picturebox1.visible = false; 
    (sender as Timer).Stop(); 
} 
2

あなたはThread.SleepTask.Delayを使用するか、他の回答で説明されてTimerを使用することができます。

恐らく、Task.DelayまたはThread.Sleepを使用するのは、プログラムがブロッキングとフリーズ状態になると思われるためです。フォームを凍結防止のために別のスレッドでThread.Sleepを使用することができます。

this.pictureBox1.Visible = true; 
Task.Run(() => 
{ 
    Thread.Sleep(5000); 
    this.Invoke(new Action(() => 
    { 
     this.pictureBox1.Visible = false; 
    })); 
}); 
//Other codes which you put here, will not wait and will run immediately. 
//Then after 5 seconds the picture box will be invisible again. 
0

あなたはまた、GDI +を使用してこれを行うことができます。 PictureBoxを使用する代わりに、フォームのPaintイベントのハンドラーを追加するだけです。その中にe.Graphics.DrawImage()メソッドを使用して画像を描画します。 1秒後にfalseに設定しなければならないグローバルなbool変数を使用します(または、あなたの要件が何であれ)。 Paintイベントでは、画像を描画する前にこの変数をチェックしてください。

bool DrawImage = true; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    Task.Delay(1000).ContinueWith((t) => 
    { 
    DrawImage = false; 
    Invalidate(); 
    }); 
} 

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    if (DrawImage) 
    e.Graphics.DrawImage(YOUR_IMAGE_HERE, 0, 0); 
}