我有3種形式 - 主要形式是Form1其他是一個飛濺形式,然後登錄屏幕。 初始屏幕首先顯示並填充服務器。然後,顯示frmAppLogin,用戶輸入一個硬編碼密碼,結果返回到form1。窗體開始最小化
public Form1()
{
_assembly = Assembly.GetExecutingAssembly();
Stream icon = _assembly.GetManifestResourceStream.....
this.Icon = new Icon(icon);
Thread t = new Thread(new ThreadStart(SplashScreen));
t.Start();
InitializeComponent();
PopulateServers();
//Thread.Sleep(800);
Form frmLogin1 = new frmAppLogin();
t.Abort();
frmLogin1.ShowDialog();
DialogResult res = new DialogResult();
res = frmLogin1.DialogResult;
if (res == DialogResult.OK)
{
_LoggedIn = true;
}
else
{
_LoggedIn = false;
}
}
這是Form1_Load的代碼:
private void Form1_Load(object sender, EventArgs e)
{
if (_LoggedIn)
{
try
{
blah blah........
}
catch
{
MessageBox.Show("Error accessing resources!");
}
}
else
{
this.Close();
}
}
並登錄表單代碼:
public frmAppLogin()
{
InitializeComponent();
this.WindowState = FormWindowState.Normal;
}
private void btnAppLogin_Click(object sender, EventArgs e)
{
if (txtAppPass.Text.ToString() == requiredPass)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
txtAppPass.Clear();
txtAppPass.Focus();
MessageBox.Show("Incorrect Password");
}
}
問題是當啓動畫面消失,日誌形式彈出一秒鐘,但立即最小化到任務欄。
通過GUI將Startposition設置爲CenterScreen和WindowState Normal。
此外,只有當我運行application.exe(或複製它)調試文件夾,I.E.當我調試在Visual Studio 2010中
編輯它不會發生:我想補充這一點,我也嘗試:
private void frmAppLogin_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
}
這並沒有幫助。
從第二個線程內的閃屏,除了GUI線程?這怎麼能工作? – 2012-08-08 11:48:04
@ uwe kiem,如http://stackoverflow.com/questions/11861701/displaying-a-user-control-is-loading-message-while-loading-a-user-control/11861903#11861903中所述,這是可行的,因爲它的一個單獨的線程,如果它的主要線程並不重要。 – wterbeek 2012-08-08 11:53:26
@UweKeim我想要實現的是在顯示splashscreen時運行的populateservers方法,然後一旦完成,用戶必須登錄。 – k1f1 2012-08-08 11:53:33