C#线程,能不能每个线程都能控制控件输出呀

凶猛的大白菜 2012-10-09 12:09:43
代码
public Form1()
{
InitializeComponent();
}

public delegate void dd();
private void f()
{
while (true)
{
Thread.Sleep(1000);
Print();
}
}
public void Print()
{
if (this.textBox1.InvokeRequired)//检查当前线程是不是控件所在线程
{
dd g = new dd(Print);
this.Invoke(g);
}
else
{
if (Thread.CurrentThread.Name == "1")
{
textBox1.Text += "1";
}
else if (Thread.CurrentThread.Name == "2")
{ textBox1.Text = "2"; }
else
{ textBox1.Text += "f"; }
}

}

private void Form1_Load(object sender, EventArgs e)
{
Thread t1 = new Thread(new ThreadStart(f));
//ThreadStart t = new ThreadStart(f);
//Thread t1 = new Thread(t);
t1.Name = "1";
t1.Start();
t1.IsBackground = true;
Thread t2 = new Thread(new ThreadStart(f));
t2.Name = "2";
t2.IsBackground = true;//设置为后台进程
t2.Start();
}
我发现为什么,只会输出ffffffff,难道不能让t1,t2都改变textbox的值吗,这个说到底t1,t2没什么用,求大神改一改,让运行到线程t1时输出1,线程t2时输出2
...全文
110 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2012-10-09
  • 打赏
  • 举报
回复
给print()增加一个参数,让线程把自己的id传进去。
这是解决你这个最简单的办法。
print(string id)
{
textBox1.Text += id == "1" ? "a" : "b";
}

private void f()
{
while (true)
{
Thread.Sleep(1000);
this.Invoke(print, Thread.CurrentThread.Name);
}
}
凶猛的大白菜 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

换言之,你知道用invoke这是你唯一靠谱的地方,但是invoke的用处就是让主线程来执行。
[/Quote]那让t1,t2也能执行该怎么做
凶猛的大白菜 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

看错了。还是稍微有点靠谱的。

但是问题在于,这代码当然只能输出f,因为
if (Thread.CurrentThread.Name == "1")或者
if (Thread.CurrentThread.Name == "2")根本就不可能成立,当当前线程不是主线程的时候
if (this.textBox1.InvokeRequired)肯定是true。
[/Quote]求指教点方法或者代码。感谢
threenewbee 2012-10-09
  • 打赏
  • 举报
回复
换言之,你知道用invoke这是你唯一靠谱的地方,但是invoke的用处就是让主线程来执行。
threenewbee 2012-10-09
  • 打赏
  • 举报
回复
看错了。还是稍微有点靠谱的。

但是问题在于,这代码当然只能输出f,因为
if (Thread.CurrentThread.Name == "1")或者
if (Thread.CurrentThread.Name == "2")根本就不可能成立,当当前线程不是主线程的时候
if (this.textBox1.InvokeRequired)肯定是true。
凶猛的大白菜 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

我的天,这代码也太不靠谱了吧,第一天学多线程?连使用异步委托让UI线程自己操作控件这点常识都没有。
[/Quote]还没学线程,自学的感觉好多东西不太理解,这个代码还是琢磨好久弄出来,稍微能理解的,求指导

110,825

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧