您的位置:首页 > 其它

[2014-9-15]异步委托线程高级

2016-05-17 20:27 253 查看
昨天悲剧,帮别人调代码,愣没调出来。还没时间写博文了。 忧桑...
昨天的今天写吧,今天也没学,就上了一天的课、

1 首先窗口间数据进行传递。也就是父窗口与子窗口数据进行传递。

用委托实现

①,在同一命名控件下定义委托。

②,在子窗口创建委托实例。

③,在父窗口创建子窗口对象,传递委托方法。

public delegate void SetString(string str);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Text = Thread.CurrentThread.ManagedThreadId.ToString();
//允许其他线程来访问
// Control.CheckForIllegalCrossThreadCalls = false;
}

private void btnMain_Click(object sender, EventArgs e)
{
FChild fChild = new FChild();
fChild.SetStr = new SetString(set);
fChild.Show();
}
private void set(string str)

{

this.txtMain.Text=str;
}
}

子窗口:

public FChild()
{
InitializeComponent();
this.Text = Thread.CurrentThread.ManagedThreadId.ToString();
}
public SetString SetStr;

private void btnChild_Click(object sender, EventArgs e)
{
SetStr(this.txtChild.Text);
}

用多线程实现:

线程之间传递在不同窗口之间不能传递,也就是允许其他线程来访问 当前线程创建的控件

Control.CheckForIllegalCrossThreadCalls = false;//不推荐这个方法

使用Invoke()方法

public delegate void SetTextDel(string txt);

public partial class MainFrm : Form
{
private SetTextDel MySetCotrolTxt4OtherThreadDel;

public MainFrm()
{
InitializeComponent();

this.Text = Thread.CurrentThread.ManagedThreadId +"";

//允许其他线程来访问 当前线程创建的 控件:Control
//掩耳盗铃
//Control.CheckForIllegalCrossThreadCalls = false;

MySetCotrolTxt4OtherThreadDel = new SetTextDel(this.SetText4OtherThread);
}

private void button1_Click(object sender, EventArgs e)
{
//ChildFrm frm = new ChildFrm();
//frm._SetTextDel = new SetTextDel(SetText);
//frm.Show();

Thread thread = new Thread(()=>
{
ChildFrm frm = new ChildFrm();
frm._SetTextDel = new SetTextDel(SetText);
frm.ShowDialog();
});
thread.Start();
}

public void SetText(string txt)
{
//InvokeRequired 当线程执行到此的时候,校验一下txtMessage控件是哪个线程创建的。如果是自己创建的InvokeRequired:fasle反之则为true
if(this.txtMessage.InvokeRequired)
{
this.Invoke(MySetCotrolTxt4OtherThreadDel, txt);
}
else
{
this.txtMessage.Text = txt;
}
}

public void SetText4OtherThread(string strTxt)
{
this.txtMessage.Text = strTxt;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: