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

2 に答える 2

1

ループが UI スレッドをブロックしています。load イベントが発生すると、ループがメッセージ キューの継続を停止します。

(WinForms を使用しているため) 最も簡単なオプションは、Timerコントロールを使用してコードをTickイベントに配置することです。

于 2013-09-02T01:09:40.900 に答える
0

updates_Load で更新フォームを閉じているのはなぜですか?? "this.Close();" フォームロードに close() 関数を記述すると、画面をロードした後にフォームが閉じられます。

于 2013-09-02T01:11:31.563 に答える