黑马程序员技术交流社区
标题:
c#下如何实现跨线程访问
[打印本页]
作者:
冯华亮
时间:
2012-8-6 18:15
标题:
c#下如何实现跨线程访问
我想大家在开发winform时,经常需要从函数线程访问UI线程,具体如何实现,下面给出实例代码,分享交流一下
看你的程序是在函数中给控件赋值的
这个要用委托的
UI是一个线程,你的函数是另一个线程
你要更新UI的内容,只能让UI线程去做
,C#中跨线程访问控件问题解决方案
首先在窗体上,创建一个listbox,lable.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Data.SqlClient;
namespace AccessControl
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Thread newthread = new Thread(new ThreadStart(BackgroundProcess));
newthread.Start(); //线程启动方法
}
/// <summary>
/// 定义一个代理
/// </summary>
private delegate void CrossThreadOperationControl();//委托申明关键字
private void BackgroundProcess()
{
// 将代理实例化为一个匿名代理
CrossThreadOperationControl CrossDelete = delegate() (单例委托)
{
int i = 1;
while (i<5)
{
// 向列表框增加一个项目
listBox1.Items.Add("Item " + i.ToString());
i++;
}
label1.Text = "我在新线程里访问这个lable!";
listBox1.Items.Add(label1.Text);
} ;
listBox1.Invoke(CrossDelete);
// lisBox1.Invko(CrossDelete new Object【】
{string int })
}
}
}
复制代码
作者:
郭张浩
时间:
2012-8-7 04:27
可以参考视频里的:TextBox.CheckForIllegalCrossThreadCalls = false;
让该属性自查关闭。用.CheckForIllegalCrossThreadCalls = false
作者:
许庭洲
时间:
2012-8-7 09:38
值得学习!
作者:
郑小杰
时间:
2012-8-7 17:29
很 给 力 啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2