关于线程的问题!

panwen516 2008-07-12 12:07:24
问题一:怎么样通过UI层关闭后台线程?
项目中要通过前台按钮(Cancel)关闭后台线程执行的操作,项目中用的是三层架构,线程的执行是被封装在逻辑层中的,线程是用的线程池(ThreadPool),项目的目的是切割一个大文件,如果我按了Cancel按钮后,所有的操作要停止,当然也包含后台的线程池中的线程。现在我不明白怎么关闭或停止线程池中的线程。


问题二:C#中线程池中的线程与Thread类的线程有没有回调方法?

用委托的异步操作但任务完成时有个回调方法来通知线程的任务完成,但不知道线程池中的线程与线程类有没有这个方法?

如果高手回答的很精细,全面,可以突出我这两个问题来谈的话,我会考虑加分的。谢谢。
...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
panwen516 2008-07-17
  • 打赏
  • 举报
回复
请问信号通知关闭怎么实现?
SlaughtChen 2008-07-13
  • 打赏
  • 举报
回复
吸收啦
dawave 2008-07-13
  • 打赏
  • 举报
回复
一点提示:MSDN的文档提到应该尽量避免使用Abort一类的函数,最好是用信号通知线程让它自己关闭。
panwen516 2008-07-12
  • 打赏
  • 举报
回复
感谢RonoTian的提议
我在家写了相应的代码:
class BackThread//后台线程调用类
{
List<Thread> list = new List<Thread>();
public void ThreadsWork()
{
for (int i = 0; i < 3; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(xx));
}
}

private void xx(object obj)
{
//Thread.CurrentThread;
list.Add(Thread.CurrentThread);
DataTable table = new DataTable();
table.Columns.Add("id",typeof(int));
table.Columns.Add("name",typeof(string));
for (int i = 0; i < 10000000; i++)
{
DataRow row = table.NewRow();
row[0] = i;
row[1] = "wu" + i.ToString();
}
}

public void Close()
{
foreach (Thread thread in list)
{
thread.Abort();
}
}
}

//////////////////////////////UI层

BackThread backthread;
private void button1_Click(object sender, EventArgs e)////运行后台线程按钮
{
backthread = new BackThread();
backthread.ThreadsWork();
}

private void button2_Click(object sender, EventArgs e)///////结束线程按钮
{
if(backthread != null)
backthread.Close();
}



如果那位朋友有更好的方法可以一起交流,谢谢
老田低代码 2008-07-12
  • 打赏
  • 举报
回复
第一个问题,通过前台cancel关闭后台线程是一定可以的。

你可以直接调用逻辑层中制定的方法,终止线程,你可以考虑创建一个新的线程之后将其放入一个HashTable中:

比如HashTable[线程名]=新创建的线程;

然后终止的时候比如


public void SetAbort(string threadName)
{
if(HashTable.ContainsKey(threadName))
{
((Thread)HashTable[threadName]).Abort;
}
}


这样就可以了。


第二个问题:
你可以自己定义个委托,然后线程执行结束之后抛出事件,当然如果要设计更改UI的控件方面,那你要考虑了,因为在vs2005中线程直接操作UI是不安全的。


希望对你有点点的启发。。。谈不上什么帮助

110,995

社区成员

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

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

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