C# 多线程和界面交互问题 不解释 http://http://bbs.csdn.net/topics/390162519 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以先学习 BackgroundWorker. http://blog.csdn.net/conmajia/article/details/7831251野比喵的 Async http://msdn.microsoft.com/library/default.aspx骚年祝你自学成才 delegate void SetpicsiziCallback(string xiaoxi); private void SetXiaoXi(string xiaoxi) { if (this.InvokeRequired) { SetpicsiziCallback d = new SetpicsiziCallback(SetXiaoXi); this.Invoke(d, new object[] { xiaoxi }); } else { this.toolStripStatusLabel1.Text = xiaoxi; } }直接调用SetXiaoXi赋值 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;namespace Model{ public static class ControlExtended { public delegate void InvokeHandler(); /// <summary> /// 线程操作Invoke /// </summary> /// <param name="control"></param> /// <param name="handler"></param> public static void UIInvoke(this Control control, InvokeHandler handler) { if (control.InvokeRequired) { control.Invoke(handler); } else { handler(); } } }}//调用private void button3_Click(object sender, EventArgs e) { Thread tdAdd = new Thread(function); tdAdd.Start(); }public void function() { this.UIInvoke(() => { //执行代码 }); } 其实就是ui 只能在创建UI元素的线程上调用。Dispather.Invoke,其他的自己慢慢琢磨吧。多线程可不是几句话能说清楚的,这里面花样太多。你看.net4.5不就是在多线程,异步上做了改进。你去看文档,都会推荐你用Task,但是Task的问题在哪?没人告诉你。你要自己琢磨。这里面还有闭包的问题。自己学吧。 方式一:在线程中使用Invoke来刷新数据,并不断的读取UI中的数据。方式二:使用数据双向绑定,这样一来,线程中的数据就可以即时的刷新到UI中,同时UI中数据的改变也可以即时的反馈到线程中。 开多线程楼主应该是会的。主要的问题应该是跨线程调用的问题吧。有一个叫INVOKE的神器。研究好它 基本上大多数的跨线程调用问题都能解决 哇。好高深。还对Control使用了扩展方法~~~ 我想问一下想做VS中错误列表和工具箱那样的窗体该用什么窗体啊? winform中pictureBox怎样动态邦定图片 serialPort控件的问题 winfrom 下的datagrid 比较容易忘记字符串处理,请大家花两份中看下,呵呵 同一个socket在两个线程里同时发送和接收数据是否安全?如果不安全怎样才能做到同时发送和接收 连接帖,50分求助!孟子E章兄能否帮忙看看? 一个简单的问题:对话框之间传送数据 Datatable合计 菜鸟提问:右键菜单不会出现,哪里出的问题? Excel的引用不成功呢 DataAdapter.SelectCommand 属性需要初始化。
野比喵的
骚年祝你自学成才
private void SetXiaoXi(string xiaoxi)
{
if (this.InvokeRequired)
{
SetpicsiziCallback d = new SetpicsiziCallback(SetXiaoXi);
this.Invoke(d, new object[] { xiaoxi });
}
else
{
this.toolStripStatusLabel1.Text = xiaoxi;
}
}
直接调用SetXiaoXi赋值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace Model
{
public static class ControlExtended
{
public delegate void InvokeHandler();
/// <summary>
/// 线程操作Invoke
/// </summary>
/// <param name="control"></param>
/// <param name="handler"></param>
public static void UIInvoke(this Control control, InvokeHandler handler)
{
if (control.InvokeRequired)
{
control.Invoke(handler);
}
else
{
handler();
}
}
}
}//调用
private void button3_Click(object sender, EventArgs e)
{
Thread tdAdd = new Thread(function);
tdAdd.Start();
}
public void function()
{
this.UIInvoke(() =>
{
//执行代码
});
}
方式二:使用数据双向绑定,这样一来,线程中的数据就可以即时的刷新到UI中,同时UI中数据的改变也可以即时的反馈到线程中。
有一个叫INVOKE的神器。研究好它 基本上大多数的跨线程调用问题都能解决
哇。好高深。还对Control使用了扩展方法~~~