“线程”为什么会自动“Stopped”???
sswp7 2013-01-05 03:36:36 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”,会不会非常浪费资源呢???