[quote=引用 11 楼 gold8fish 的回复:] [quote=引用 6 楼 Tidal_Choidi 的回复:] 我觉得对待处理线程状态的操作问题之前,首先要搞清楚线程的几种状态的概念。 按照我个人对这个问题的理解,给楼主提供下面的思路,不知道可行性如何? 首先,要保证线程函数正常退出,实际上当线程函数执行完毕且正常退出之后,也就意味着这个线程也将“退场”(线程正常结束)。 我的想法是在你的线程函数中加一个While(新窗体.flag) 状态监视的循环,这个flag就是标识你是否已经打开了一个新的窗体。如果新打开了一个窗体,你就把flag这个变量置成flase,这个时候,线程函数就会跳出while循环,朝着线程函数的“最后”方向执行,指导退出线程函数,线程函数退出,那么线程也就结束了。 当再一次返回主界面的时候,再重新开启一下线程就可以。 这个思路的关键是要传递flag的值,可以在实例化新窗体的时候传值。在你的新窗体定义一个全局变量 public static flag=true;,构造函数中 flag=false; 这样就可以在你的线程函数中监视窗体的状态了。
[quote=引用 6 楼 Tidal_Choidi 的回复:] 我觉得对待处理线程状态的操作问题之前,首先要搞清楚线程的几种状态的概念。 按照我个人对这个问题的理解,给楼主提供下面的思路,不知道可行性如何? 首先,要保证线程函数正常退出,实际上当线程函数执行完毕且正常退出之后,也就意味着这个线程也将“退场”(线程正常结束)。 我的想法是在你的线程函数中加一个While(新窗体.flag) 状态监视的循环,这个flag就是标识你是否已经打开了一个新的窗体。如果新打开了一个窗体,你就把flag这个变量置成flase,这个时候,线程函数就会跳出while循环,朝着线程函数的“最后”方向执行,指导退出线程函数,线程函数退出,那么线程也就结束了。 当再一次返回主界面的时候,再重新开启一下线程就可以。 这个思路的关键是要传递flag的值,可以在实例化新窗体的时候传值。在你的新窗体定义一个全局变量 public static flag=true;,构造函数中 flag=false; 这样就可以在你的线程函数中监视窗体的状态了。
[quote=引用 9 楼 shingoscar 的回复:] [quote=引用 7 楼 gold8fish 的回复:] [quote=引用 1 楼 shingoscar 的回复:] 线程方法是怎样的?
[quote=引用 7 楼 gold8fish 的回复:] [quote=引用 1 楼 shingoscar 的回复:] 线程方法是怎样的?
我觉得对待处理线程状态的操作问题之前,首先要搞清楚线程的几种状态的概念。 按照我个人对这个问题的理解,给楼主提供下面的思路,不知道可行性如何? 首先,要保证线程函数正常退出,实际上当线程函数执行完毕且正常退出之后,也就意味着这个线程也将“退场”(线程正常结束)。 我的想法是在你的线程函数中加一个While(新窗体.flag) 状态监视的循环,这个flag就是标识你是否已经打开了一个新的窗体。如果新打开了一个窗体,你就把flag这个变量置成flase,这个时候,线程函数就会跳出while循环,朝着线程函数的“最后”方向执行,指导退出线程函数,线程函数退出,那么线程也就结束了。 当再一次返回主界面的时候,再重新开启一下线程就可以。 这个思路的关键是要传递flag的值,可以在实例化新窗体的时候传值。在你的新窗体定义一个全局变量 public static flag=true;,构造函数中 flag=false; 这样就可以在你的线程函数中监视窗体的状态了。
suspend()、resume()这个方法已经过时了,并且是不被推荐的。 一个线程去强制停止另外一个正在运行的线程是有风险的。 如果你需要停止的线程是一个循环机制的,可以使用标志位,需要停止的线程去检查这个标志位,如果为TRUE就休眠,直到为false 才运行。 这是我已知最安全的方式了。
[quote=引用 1 楼 shingoscar 的回复:] 线程方法是怎样的?
this.Label1.InvokeEx(e => e.Text = DateTime.Now); 试试加入界面防止死机
线程方法是怎样的?
[quote=引用 12 楼 gold8fish 的回复:] [quote=引用 9 楼 shingoscar 的回复:] [quote=引用 7 楼 gold8fish 的回复:] [quote=引用 1 楼 shingoscar 的回复:] 线程方法是怎样的?
111,129
社区成员
642,533
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧