“线程”为什么会自动“Stopped”???
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”,会不会非常浪费资源呢???
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”,会不会非常浪费资源呢???
...全文
相关推荐
Linux下如何查杀stopped进程详解
当遇到"Stopped"状态的进程时,这通常意味着进程被挂起,等待特定事件或信号才能继续执行。本篇文章将详细解析如何在Linux环境下查找并终止这些挂起的进程。
python 多线程重启方法
本篇文章主要探讨的是如何在Python中实现多线程的自动重启机制,以确保即使有线程崩溃,程序也能继续执行。
c++ 线程池
condition_variable>class ThreadPool {public: ThreadPool(size_t numThreads) : stopped(false) { for (size_t
QT线程start()和run()
;};Thread::Thread() { stopped = false;}void Thread::run() { while (!
Win11家庭版安装Docker,解决engine stopped问题,安装hyper-v的命令
本文将详细介绍如何在Win11家庭版上安装Docker,并解决“engine stopped”问题,同时提供安装Hyper-V所需命令的具体操作方法。


