标题:[求助]线程状态waitsleepjoin怎么办?
取消只看楼主
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
 问题点数:0 回复次数:9 
[求助]线程状态waitsleepjoin怎么办?
using System;
using System.Threading;

class ApartmentTest
{
static void Main()
{
Thread newThread =
new Thread(new ThreadStart(ThreadMethod));
newThread.SetApartmentState(ApartmentState.MTA);

// The following line is ignored since
// ApartmentState can only be set once.
//newThread.SetApartmentState(ApartmentState.STA);

Console.WriteLine("\nThreadState: {0}, ApartmentState: {1}",
newThread.ThreadState, newThread.ApartmentState);

newThread.Start();
Console.WriteLine("\nThreadState: {0}, ApartmentState: {1}",
newThread.ThreadState, newThread.ApartmentState);
// Wait for newThread to start and go to sleep.
Thread.Sleep(300);
try
{
// This causes an exception since newThread is sleeping.
newThread.SetApartmentState(ApartmentState.STA);
}
catch (ThreadStateException stateException)
{
Console.WriteLine("\n{0} caught:\n" +
"Thread is not in the Unstarted or Running state.",
stateException.GetType().Name);
Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
newThread.ThreadState, newThread.GetApartmentState());
}


}

static void ThreadMethod()
{
Thread.Sleep(1000);
}
}



搜索更多相关主题的帖子: 线程 状态 newThread using The 
2006-08-31 09:49
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
输出:hreadState: Unstarted, ApartmentState: MTA

ThreadState: Running, ApartmentState: MTA

ThreadStateException caught:
Thread is not in the Unstarted or Running state.
ThreadState: WaitSleepJoin, ApartmentState: MTA

问题: 为什么最后的时候newthread的状态为 WaitSleepJoin?


2006-08-31 09:55
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
如果 我使用

newthread.resume()
程序提示:“线程不是用户挂起的;无法使其继续。”

但是我新创建另外一个线程,也是如此提示。


2006-08-31 09:57
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
是不是WaitSleepJoin以后就不能再使用该线程了啊?

2006-08-31 10:16
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
try
{
// This causes an exception since newThread is sleeping.
newThread.SetApartmentState(ApartmentState.STA);
********************************************
是不是因为这个语句设置本该在线程启动之前就应该设置好的属性所以导致异常。
但是为什么会使该线程状态变为waitsleepjoin()呢?
*******************************************
}
catch (ThreadStateException stateException)
{
Console.WriteLine("\n{0} caught:\n" +
"Thread is not in the Unstarted or Running state.",
stateException.GetType().Name);
Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
newThread.ThreadState, newThread.GetApartmentState());
}



2006-08-31 10:41
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
catch (ThreadStateException stateException)
{
Console.WriteLine("\n{0} caught:\n" +
"Thread is not in the Unstarted or Running state.",
stateException.GetType().Name);
***************************
newThread.Suspend();
newThread.Resume();
加上这两句就出错。
“线程目前未运行;无法使其挂起。”
***************************
Console.WriteLine("ThreadState: {0}, ApartmentState: {1}",
newThread.ThreadState, newThread.GetApartmentState());
}

2006-08-31 10:43
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
回楼上的,加了“ newTread.join(300) ;”这一句 为什么就不出错了呢?

2006-08-31 11:51
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
还有,运行时候虽然不出错了,但是该线程的状态依然是:waitsleepjoin


newTread.join(300) ;应该是指让newThread处于signaled状态吧,那么为什么使用ThreadState状态仍然是 waitsleepjoin?

而且,如果 join(600)时间超过一点的话,线程状态就出错阿。

2006-08-31 11:57
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
恩,知道了,如果线程陷入该状态是否就是说无法在运行了?
如果可以运行,应该怎么做?
我使用过newThread.resume();
但是这个线程的状态仍然是
waitsleepjoin();

2006-08-31 16:13
jingzhao22visa
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2006-8-10
得分:0 
“msdn上說join會執行com的作業 sleep不會”

执行com的作业。。。。。。。。 不懂。。。
是说像我那样子一般的程序让它变成waitsleepjoin以后它的状态基本就不会改变了吗?

或者说有别的方法可以改变其状态?
用什么函数?


2006-08-31 17:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-87117-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030725 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved