多執行緒學習(二)
之前的多執行緒Demo都是在輸出到控制檯的情況下進行的,那麼,如果我們將程式執行結果輸出到控制元件會發生什麼事情呢?下面一起來看程式碼吧。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 執行緒訪問控制元件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Test()
{
for (int i = 0; i < 10000; i++)
{
//執行緒訪問控制元件
textBox1.Text = i.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
//建立一個執行緒去執行這個方法
Thread th = new Thread(Test);
//將執行緒設定為後臺執行緒
th.IsBackground = true;
//標記這個執行緒準備就緒了,可以隨時被執行,具體什麼時候執行這個執行緒,由CPU決定
th.Start();
}
}
}
執行結果丟擲了“執行緒間操作無效: 從不是建立控制元件“textBox1”的執行緒訪問它。”的異常。
這是因為在.NET中預設是不允許跨執行緒訪問的,我們新開了一個執行緒來訪問主執行緒的控制元件,所以丟擲了異常。那麼怎麼辦?
可以在窗體載入的時候就將跨執行緒訪問的檢查機制給關掉,這樣我們就可以跨執行緒訪問控制元件了。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 執行緒訪問控制元件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//取消跨執行緒的訪問檢查
Control.CheckForIllegalCrossThreadCalls = false;
}
public void Test()
{
for (int i = 0; i < 10000; i++)
{
//執行緒訪問控制元件
textBox1.Text = i.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
//建立一個執行緒去執行這個方法
Thread th = new Thread(Test);
//將執行緒設定為後臺執行緒
th.IsBackground = true;
//標記這個執行緒準備就緒了,可以隨時被執行,具體什麼時候執行這個執行緒,由CPU決定
th.Start();
}
}
}
此時,再執行我們的程式,就發現問題已經解決了,程式可以正常訪問控制元件了。
相關文章
- 多執行緒學習(二)CountDownLunch與CyclicBarrier執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- Java多執行緒學習筆記(二) (轉)Java執行緒筆記
- C#多執行緒學習(二) 如何操縱一個執行緒C#執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒學習Java執行緒
- 多執行緒學習一執行緒
- iOS 多執行緒-學習iOS執行緒
- Java 多執行緒 學習筆記(二)停止執行緒的幾種方法Java執行緒筆記
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- 多執行緒(二)執行緒
- 多執行緒系列(二):多執行緒基礎執行緒
- Java 多執行緒NIO學習Java執行緒
- C++多執行緒學習C++執行緒
- Java多執行緒(學習篇)Java執行緒
- Linux多執行緒學習Linux執行緒
- 多執行緒學習筆記執行緒筆記
- 多執行緒學習初步(轉)執行緒
- C#多執行緒學習(四) 多執行緒的自動管理(執行緒池)C#執行緒
- C# 多執行緒學習(4) :多執行緒的自動管理(執行緒池)C#執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- C#多執行緒學習(一) 多執行緒的相關概念C#執行緒
- C# 多執行緒學習(1) :多執行緒的相關概念C#執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- 多執行緒學習-Disruptor佇列執行緒佇列
- java學習筆記--多執行緒Java筆記執行緒
- java多執行緒學習小案例Java執行緒
- 多執行緒學習筆記 (轉)執行緒筆記
- Java多執行緒學習(八)執行緒池與Executor 框架Java執行緒框架
- Java 多執行緒學習筆記(三)-守護執行緒Java執行緒筆記
- 多執行緒基礎必要知識點!看了學習多執行緒事半功倍執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- python 多程式和多執行緒學習Python執行緒
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒