.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
留言
阿軒 ( 2022-11-29 )感謝大大,無私的分享~