知识大全 C#多线程操作控件的两种安全方式
Posted 操作
篇首语:贵在坚持,难在坚持,成在坚持。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#多线程操作控件的两种安全方式相关的知识,希望对你有一定的参考价值。
C#多线程操作控件的两种安全方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
实现的功能是
按button 之后 label 会每 毫秒显示一次数字 数字从 到 (委托方式实现)
按button 之后 模拟耗时操作 秒后label 显示为当前时间 (BackgroundWorker方式实现)
在 执行的时候 按button 可以将label 的内容改为textbox 的内容 (此处为主线程控制 用于显示多线程未死锁主线程)
using System;
using System Collections Generic;
using System ComponentModel;
using System Data;
using System Drawing;
using System Linq;
using System Text;
using System Windows Forms;
using System Threading;
namespace WindowsFormsApplication
public partial class Form : Form
private delegate void SetState(int x);//代理
public Form ()
InitializeComponent();
Thread CurrentThread Name = Main ;//主线程命名
Console WriteLine(Thread CurrentThread Name);
private void TempFunction() //中转函数 用来连续多次调用目标函数并模拟延时
for (int i = ; i < ;i++ )
ThreadFunction(i);
Thread Sleep( );
private void ThreadFunction(int x) //实际控件操作函数
if (label InvokeRequired) //用委托来操作
SetState ss = new SetState(ThreadFunction);
Invoke(ss new object[]x);
Console WriteLine(Thread CurrentThread Name);
else //普通方式操作
label Text = x ToString();
label Update();
Console WriteLine(Thread CurrentThread Name);
private void button _Click(object sender EventArgs e) //主线程的按钮操作 用来显示区别所在
label Text = textBox Text;
private void button _Click(object sender EventArgs e) //按下按钮后开始多线程操作
Thread th = new Thread(new ThreadStart(TempFunction));
th IsBackground = true;
th Name = kidfruit ;
th Start();
private void backgroundWorker _DoWork(object sender DoWorkEventArgs e) //使用BackgroundWorker控件
Thread Sleep( ); //模拟操作延时
private void backgroundWorker _RunWorkerCompleted(object sender RunWorkerCompletedEventArgs e) //BackgroundWorker耗时操作结束后
label Text = DateTime Now ToLongTimeString();
private void button _Click(object sender EventArgs e) //开始BackgroundWorker的耗时操作
backgroundWorker RunWorkerAsync();
cha138/Article/program/net/201311/13500
相关参考
在进行多线程编程中比较重要也是比较困难的一个操作就是如何获取线程中的信息大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中然后再提供一个获取方
在C#中跨线程访问Winform控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在程序需要读
二回调 轮询方法最大的特点是主类Main不断询问线程类是否结束这实际上大量浪费了运行时间特别是当线程特别多的时候因此如果反过来在线
VB中文件操作的两种方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 文本文件的操作 此种方
以上是一个多数熟悉单线程编程的人在第一反应下给出的实现方法但是该类在运行的时候输出的结果却不是期望的HelloWorld!而是Hello这是由于线程的竞争条件导致的
C#开发ActiveX控件操作指南 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C#开发Act
知识大全 详解两种C#自动实现DLL(OCX)控件注册的方法
详解两种C#自动实现DLL(OCX)控件注册的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
VB.NET中采用多线程填写treeview控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!功能
首先我们分析一下异步处理的环境 需要在当前线程中获取返回值 不需要在当前线程中获取返回值但是仍然需要对返回值做处理 对于第中情况还可以继续细分 在当前线程中启动线程T然后继续执行当前线程中
C#创建多线程应用程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在NET和C#中编写一个多