WinForm 畫面為什麼不會更新 WinForm 畫面為什麼不會更新
  .NET       ez      2012-06-04

當在寫迴圈時,更改Form上的object,但無法即時更新嗎? 只要在更改object後加入 this.Refresh(); 即可。

using System;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int x = 0;
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                ShowText(i + 1);
                this.Refresh(); //加入這行
                System.Threading.Thread.Sleep(100);
            }
        }

        //顯示文字到label
        private void ShowText(int i)
        {
            label1.Text = i.ToString();
        }
    }
}

但會發現在跑迴圈時,無法移動Form會有當掉的感覺! 因為Form也是由一個Thread運作,但是在跑迴圈時使用Sleep指令,所以Form也跟著停止了,造成畫面卡住的情況。 解決方式只要將迴圈建立在Thread內即可。

using System;
using System.Threading;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int x = 0;
        private void Form1_Load(object sender, EventArgs e)
        {
            //允許Cross Thread
            Form.CheckForIllegalCrossThreadCalls = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //建立Thread
            new Thread(() =>
            {
                for (int i = 0; i < 100; i++)
                {
                    ShowText(i + 1);
                    this.Refresh();
                    System.Threading.Thread.Sleep(100);
                }
            }).Start();
        }

        //顯示文字到label
        private void ShowText(int i)
        {
            label1.Text = i.ToString();
        }
    }
}

標籤:   .NET

我要留言