C# 中有两个窗体Form1和Form2,主窗体为Form1,Form2有一个TextBox接收数据。

Form1的代码里有一个线程不停接收到的数据就在Form2的TextBox上显示,如何跨线程调用,一开始是让Form2.show(),Form2显示出来,之后就不停从Fo... Form1的代码里有一个线程不停接收到的数据就在Form2的TextBox上显示,如何跨线程调用,一开始是让Form2.show(),Form2显示出来,之后就不停从Form1里接收过来的数据更新TextBox里的数据,这里面就是跨线程调用控件比较麻烦,请教一下高手有没有具体的代码给我做参考,谢谢。 展开
 我来答
biubiubiubiubiu5biu
2013-01-15 · TA获得超过1647个赞
知道小有建树答主
回答量:1126
采纳率:0%
帮助的人:1166万
展开全部
你这么设计程序就麻烦了,你的需求其实只需要在Form2里加一个方法SetText(string strMessage)就可以了,然后再Form1的接收数据的方法里调f2.SetText:

就像这样
//========Form2========//
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void SetText(string strMessage)
{
txtOutput.Text = strMessage;
}
}
//========Form1========//
public partial class Form1 : Form
{
Form2 f2;
public Form1()
{
InitializeComponent();
f2 = new Form2();
f2.Show();
}
private void txtInput_TextChanged(object sender, EventArgs e)
{
f2.SetText(txtInput.Text);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyric0246
2013-01-15 · TA获得超过490个赞
知道答主
回答量:61
采纳率:0%
帮助的人:87.7万
展开全部
Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
StartReciveThread();
}
private void StartReciveThread()
{
Form2 form2 = new Form2();
Thread recivingThread = new Thread(delegate()
{

while (true)
{
//模拟接收数据
string recivecText = DateTime.Now.ToString();

//跨线程调用form2的方法为textbox赋上接受的数据 form2.Invoke(new Action(() => { form2.SetText(recivecText); }));
//等待1秒,防止界面刷新过快
Thread.Sleep(1000);
}

});
recivingThread.Start();
form2.Show();
}

Form2:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void SetText(string text)
{
textBox1.Text = text;
textBox1.Invalidate();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bxfc
2013-01-15 · TA获得超过872个赞
知道小有建树答主
回答量:1104
采纳率:0%
帮助的人:684万
展开全部
Form1中的例子:

var fromShow = new fmShow();
fromShow.Show();
Thread td = new Thread(new ThreadStart(delegate()
{
for (int i = 0; i < 100; i++)
{
fromShow.OnTextChange(i.ToString());

Thread.Sleep(500);
}
}));

td.IsBackground = true; td.Start();

formSHow中的方法例子:

public void OnTextChange(string text)
{
this.BeginInvoke(new MethodInvoker(delegate() { this.textBox1.Text = text; }));

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式