Форма не отображается должным образом

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

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);

2 ответа

Решение

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

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

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

Другие вопросы по тегам