2013-09-02 3 views
0

У меня есть код в моей основной форме, который загружает другую форму, как только проект запускает:форма не отображается должным образом

private void Form1_Load(object sender, EventArgs e) 
    { 
     Updating upd = new Updating(); 
     upd.Show(); 
    } 

Эта новая форма (в настоящее время) содержит только этот код:

private void Updating_Load(object sender, EventArgs e) 
    { 
     this.BackgroundImage = Properties.Resources.updating1; 
     Stopwatch dw = new Stopwatch(); 
     dw.Start(); 
     bool qsdf = true; 
     while (qsdf) 
     { 
      if (dw.ElapsedMilliseconds >= 3000) qsdf = false; dw.Stop(); 
     }  
     this.BackgroundImage = Properties.Resources.updating2; 
     Stopwatch sw = new Stopwatch(); 
     sw.Start(); 
     qsdf = true; 
     while (qsdf) 
     { 
      if (sw.ElapsedMilliseconds >= 3000) qsdf = false; sw.Stop(); 
     } 
     this.Close(); 

Теперь, по какой-то причине, форма, называемая (форма, называемая Updating), вообще не отображается. Все, что в настоящее время происходит, я ничего не получаю в течение 6 секунд (как отмечено секундомером), прежде чем я получу свою основную форму, чтобы не видеть форму обновления даже один раз.

Примечания: это код, в моем Updating.Designer.cs, который привлекает все компоненты:

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
     this.BackgroundImage = global::BossCraftLauncher.Properties.Resources.updating1; 
     this.ClientSize = new System.Drawing.Size(300, 100); 
     this.ControlBox = false; 
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
     this.MaximizeBox = false; 
     this.MinimizeBox = false; 
     this.Name = "Updating"; 
     this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 
     this.Text = "BCL Update"; 
     this.Load += new System.EventHandler(this.Updating_Load); 
     this.ResumeLayout(false); 

ответ

1

Вашего цикл блокирующие поток пользовательского интерфейса. По мере возникновения события загрузки .. ваш цикл останавливает его от продолжения очереди сообщений.

Самый простой вариант для вас (поскольку вы используете WinForms) - использовать элемент управления Timer и поместить свой код в событие Tick.

+0

Я вижу, позвольте мне попробовать это тогда :) – Yorrick

+0

Работал как шарм :) по крайней мере сейчас я знаю, что изображения меняются должным образом :) – Yorrick

0

Почему вы закрываете обновляющую форму на update_Load ?? "This.Close();" Если вы напишете функцию close() в форме, то после загрузки экрана форма будет закрыта.

+0

Он не будет закрыт, пока оба секундомера не достигнут 3 секунд (6 секунд всего), так что это не должно быть проблемой. – Yorrick