.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 )感謝大大,無私的分享~
