實現方法代碼示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int a = 0;
//多線程編程
//委託:ParameterizedThreadStart
Thread objThread1 = new Thread(() =>
{
for (int i = 0; i < 10; i++)
{
a += i;
//控件的屬性:作用是用來判斷當前控件所在的使用環境是創建這個控件的線程(false)還是其他線程(true)
if (label1.InvokeRequired)
{
//控件的Invoke方法:方法中的第一個參數返回值爲void的委託,第二個參數是給委託對應方法傳遞的參數
label1.Invoke(new Action<string>(s =>
{
label1.Text = $"【{s}】";
}), a.ToString());
}
Thread.Sleep(500);
}
});
objThread1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
int a = 0;
Thread objThread02 = new Thread(() =>
{
for (int i = 0; i < 100; i++)
{
a += i;
if (label2.InvokeRequired)
{
label2.Invoke(new Action<int>(s =>
{
label2.Text = $"【{s}】";
}), a);
System.Threading.Thread.Sleep(200);
}
}
});
objThread02.Start();
}
}
當子線程未執行完畢,主線程關閉則會拋出異常:
解決方法:
將程序中的子線程設置爲後臺線程則只要前臺線程關閉,則後臺也自動關閉!