C#多线程假死问题(win form)

最近写程序遇到一个棘手的问题Threadt1=newThread(newThreadStart(ss1));t1.Priority=ThreadPriority.High... 最近写程序遇到一个棘手的问题
Thread t1 = new Thread(new ThreadStart(ss1));
t1.Priority =ThreadPriority.Highest;
t1.Start();

如果这个时候加多一行
t1.Join()
就会引起界面假死

ss1代码具体如下
//step1: get html from url
//http://www.songtaste.com/user/351979/
string urlToCrawl = txbUrlToCrawl.Text;
//generate http request
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(urlToCrawl);
//use GET method to get url's html
req.Method = "GET";
//use request to get response
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
string htmlCharset = "GBK";
//use songtaste's html's charset GB2312 to decode html
//otherwise will return messy code
Encoding htmlEncoding = Encoding.GetEncoding(htmlCharset);
StreamReader sr = new StreamReader(resp.GetResponseStream(), htmlEncoding);

string respHtml = sr.ReadToEnd();
rtbExtractedHtml.Text = respHtml;
string h1userP = @"<h1\s+class=""h1user"">(?<h1user>.+?)</h1>";
Match foundH1user = (newRegex(h1userP)).Match(rtbExtractedHtml.Text);
if (foundH1user.Success)
{
//extracted the expected h1user's value
txbExtractedInfo.Text = foundH1user.Groups["h1user"].Value;
}
else
{
txbExtractedInfo.Text = "Not found h1 user !";
}
}

感觉是SS1里面不知道哪里引起,请各路高人帮忙,谢谢!
展开
 我来答
vampire_c
2013-06-12 · TA获得超过735个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:481万
展开全部
这情况不是SS1引起的,是因为Join。
Thread.Join本意即为阻塞当前线程,等待子线程结束,在UI线程里调用Join方法,自然会出现界面暂时失去响应。这里为什么要调用Join呢?感觉不是很有必要。
更多追问追答
追问
但是Join应该是等待子线程结束然后就会返回主线程吧,而现在是界面完全失去响应,而不是暂时,等了很久都没反应,所以才推断是SS1出了问题。再者我现在写的程序需要知道线程有没有执行完,那么,好像只有通过join这种方法了吧。
追答
因为子线程里的Web请求比较耗时,在等待子线程结束的这段过程中,UI线程是被阻塞了的,假如完成Web请求需要1分钟,那么界面在1分钟内就会失去响应。
如果使用Join,程序一定会有一段时间没有响应,长度取决与SS1的执行时间。如果只是需要知道有没有执行完,可以用别的方式呀,比如添加一个事件让主线程处理,或者在子线程结束之前调用某个函数通知主线程。
theprogrammer
2013-06-13 · TA获得超过1650个赞
知道小有建树答主
回答量:1127
采纳率:0%
帮助的人:465万
展开全部
t1.Join()
语句是让现在的线程等t1结束才往下走。
通常加这句话是因为你需要t1的运行结果。

通常来讲,多线程是一个麻烦制造者,能不用尽量不用。
个人感觉似乎异步调用好些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
youbl
2013-09-08 · TA获得超过2510个赞
知道大有可为答主
回答量:1844
采纳率:62%
帮助的人:1644万
展开全部
t1.Start();后
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式