首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 线程有关问题

2012-04-02 
C# 线程问题!private void button1_Click(object sender, EventArgs e){ThreadTD new Thread(showwaitfr

C# 线程问题!
private void button1_Click(object sender, EventArgs e)
  {
  Thread TD = new Thread(showwaitfrm);
  TD.Start();
  Thread.Sleep(1000); dataGridView1.DataSource = getdate();
  TD.Abort();
  TD.Join();
  }
如上 我在按钮里面开启了一个线程

然后如果我不停的点击按钮  
过一会就报错!线程正在终止!
求教!

[解决办法]
线程没有执行结束时禁止再次点击。


最好的办法是异步执行。
[解决办法]

C# code
private void button1_Click(object sender, EventArgs e)  {  button1.Enabled = false;  Thread TD = new Thread(showwaitfrm);  TD.Start();  Thread.Sleep(1000);   dataGridView1.DataSource = getdate();  TD.Abort();  TD.Join();  while(TD.ThreadState != System.Threading.ThreadState.Stopped) Application.DoEvents();  button1.Enabled = true;  }
[解决办法]
探讨

引用:
线程没有执行结束时禁止再次点击。


最好的办法是异步执行。

怎么判断线程没有执行结束?
异步执行?能说的清楚点吗?我对线程不太熟悉!

[解决办法]
探讨
TD.Abort();
TD.Join();
这句就有问题,abort后,就不能join了。

[解决办法]
你这个不用多线程可以解决的啊,你这个不就是那个加载界面的问题吗?你查查,许多这样的帖子,就是先在等待窗体里面把对象初始化好,然后显示主界面。你如果用多线程,他们齐头并进你怎么控制流程啊?
[解决办法]
最好把你要开的那个线程定义成全局的,在每次开之前判断线程是否正在运行,如果是就关闭线程然后再重新开启。

Thread TD=null;
private void button1_Click(object sender, EventArgs e)
{
if(TD!=null&&TD.IsAlive==True)
TD.Abort();
Thread TD = new Thread(showwaitfrm);
TD.Start();
Thread.Sleep(1000); dataGridView1.DataSource = getdate();
TD.Abort();

}

热点排行