重複の可能性:
ユーザー コントロールのちらつきを修正する方法
現在、フォームの背景画像の画像を動的にロードするプログラムに取り組んでいます。画像が背景に完全に適用されるとすぐにフォームが表示されるようにします。
フォームイベントを試しましたが、うまくいきませBackgroundImageChanged
んでした。
画像が高解像度の場合、フォームが表示され、画像がまだ構築されていることがわかります。
コード スニペット:
this.backgroundImage = loadedImage;
// Thread.Sleep(5000);
this.Show();
ご覧のとおりThread.Sleep()
、フォームを表示する前に画像を完全にロードするのに時間を費やしています。しかし、このような方法はありますか:
this.backgroundImage = loadedImage;
while( imageIsNotFullyLoaded() ) { }
this.Show();
または、まだ見ていない他の方法やイベントはありますか?
編集:
私のコード:
forn1.cs :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace GameClient {
public partial class FormMain:Form {
getImage _getImage;
public FormMain() {
InitializeComponent();
}
private void FormMain_Load( object sender, EventArgs e ) {
_getImage = new getImage();
Image splashLogo = _getImage.fromURL( "http://ace-acid.no-ip.org/GameClient/splash.png" );
this.BackgroundImage = splashLogo;
Thread.Sleep(3000);
this.Show();
}
private void btnLogin_Click( object sender, EventArgs e ) {
this.Hide();
}
}
}
getImage.cs :
using System;
using System.Drawing;
using System.IO;
using System.Net;
namespace GameClient {
class getImage {
public Image fromURL( string URL ) {
Image tmpImg = null;
try {
HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create( URL );
request.AllowWriteStreamBuffering = true;
request.Timeout = 20000;
WebResponse response = request.GetResponse();
Stream stream = response.GetResponseStream();
tmpImg = Image.FromStream( stream );
response.Close();
} catch( Exception ex) {
return null;
}
return tmpImg;
}
}
}