“线程”为什么会自动“Stopped”???

sswp7 sswp7 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
1、主窗体启动,创建处理线程。

private void MainForm_Load(object sender, EventArgs e)
{
Common.etlprocessing = new Processing.ETLProcess();

//启动数据处理线程
DataTable dtprocessing = Model.DataAccess.dataTable("select ETLName from ETLSettings");
foreach (DataRow dr in dtprocessing.Rows)
{
Common.etlprocessing.CreateThead(dr[0].ToString().Trim());
}
}

2、线程创建方法

public bool CreateThead(string ETLTableName)
{
bool flag=false;
//TableName = ETLTableName;
try
{
Thread th = new Thread(new ParameterizedThreadStart(Do));
th.IsBackground = true;
th.Name = ETLTableName;
th.Start(ETLTableName);

threadlists.Add(ETLTableName, th);


flag = true;
}
catch (Exception ex)
{
flag = false;
}

return flag;
}


3、线程执行的方法。
public void Do(object TableName)
{
try
{
Processing(TableName.ToString());

//Thread.Sleep(60000);//线程一分钟跑一次

Thread.Sleep(1000);
}
catch (Exception)
{

}

}

问题一:
为什么线程只有在启动的时候跑了一遍“Do(object TableName)”方法,然后它的状态就变为“Stopped”了??? “Thread.Sleep(1000);”不是指定执行一次,空闲一秒吗,怎么“ThreadState”变为“Stopped”了。


问题二:
难道是因为“Processing(TableName.ToString())”方法中有错误??? 但“Processing”方法不在主线程中,它如果有错误VS2010不会提示吗??? 如果它里面有错误怎样捕获?

问题三:“Processing(TableName.ToString())”里面有很多的处理过程,如果最外面使用“Try catch”,会不会非常浪费资源呢???
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
sswp7
C# 111,128 成员 642,536 内容