C# 中有两个窗体Form1和Form2,主窗体为Form1,Form2有一个TextBox接收数据。
Form1的代码里有一个线程不停接收到的数据就在Form2的TextBox上显示,如何跨线程调用,一开始是让Form2.show(),Form2显示出来,之后就不停从Fo...
Form1的代码里有一个线程不停接收到的数据就在Form2的TextBox上显示,如何跨线程调用,一开始是让Form2.show(),Form2显示出来,之后就不停从Form1里接收过来的数据更新TextBox里的数据,这里面就是跨线程调用控件比较麻烦,请教一下高手有没有具体的代码给我做参考,谢谢。
展开
3个回答
展开全部
你这么设计程序就麻烦了,你的需求其实只需要在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);
}
}
就像这样
//========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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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; }));
}
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; }));
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询