多執行緒學習(二)
之前的多執行緒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執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- C#多執行緒學習(二) 如何操縱一個執行緒C#執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- iOS 多執行緒-學習iOS執行緒
- Java多執行緒學習Java執行緒
- 多執行緒學習一執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- 多執行緒(二)執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- Java 多執行緒NIO學習Java執行緒
- C++多執行緒學習C++執行緒
- python 多程式和多執行緒學習Python執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- Java多執行緒學習(八)執行緒池與Executor 框架Java執行緒框架
- Python學習筆記 - 多執行緒Python筆記執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- 多執行緒學習-Disruptor佇列執行緒佇列
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 多執行緒基礎必要知識點!看了學習多執行緒事半功倍執行緒
- 多執行緒複習執行緒
- 多執行緒筆記 二執行緒筆記
- 多執行緒與高併發(二)執行緒安全執行緒
- Java多執行緒學習筆記(自用)Java執行緒筆記
- 最全java多執行緒學習總結1--執行緒基礎Java執行緒
- 多執行緒實現多工二執行緒
- 【Java】多執行緒複習Java執行緒
- iOS 多執行緒記錄(二)iOS執行緒
- 多執行緒二 基本技能執行緒
- Java多執行緒(二):Thread類Java執行緒thread
- Java多執行緒的使用(二)Java執行緒
- Java多執行緒之二(Synchronized)Java執行緒synchronized
- 多執行緒的同步和非同步學習執行緒非同步