服务程序没有 Application.DoEvents怎么办

sunjunfeng5 2008-12-23 12:28:06
写了一个程序 里面使用到了while循环 ,循环里使用了 Application.DoEvents方法 可是这段代码是作为服务运行的 ,服务程序没有Appliction对象怎么办呢?




/// <summary>
/// 解析指定的URL的脚本,并且自动下载脚本文件等资源,使用此方法依赖于IE的设置,可能会下载 图片等其它资源
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
protected virtual string GetScriptAnalysisUrl(string url)
{
string result = string.Empty;
try
{
HTMLDocumentClass doc = new HTMLDocumentClass();
IHTMLDocument2 hc = doc;
hc.write("");
hc.close();
IHTMLDocument4 doc4 = doc;
IHTMLDocument2 doc2 = doc4.createDocumentFromUrl(url, "null");
while (doc2.readyState != "complete")
{
Application.DoEvents();
}
doc = (HTMLDocumentClass)doc2;
// result = doc.documentElement.innerHTML;
result = doc2.body.outerHTML;
hc.close();
doc.close();
doc2.close();

}
catch (Exception exp)
{
Log.AddSystemException(exp);
}

return result;
}

...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
much0726 2008-12-23
  • 打赏
  • 举报
回复
doc2有没有异步方法?
如果就就使用异步方法就可以了,不用在哪里等待,
或者使用同步信号量通知就好了.

在WEB中使用Application.DoEvent的目的是什么?
LZ说的服务程序,我理解为Web程序或者是WEBSERVICE程序.

LZ使用while(doc2.readyState != "complete")
这个循环的目的就是让doc2的readyState属性为"complete"时再进行以后的代码
但是这样做的思路是错的.
考虑下使用信号量或者是异步方法吧.
特别 2008-12-23
  • 打赏
  • 举报
回复
要添加System.Windows.Forms引用
sunjunfeng5 2008-12-23
  • 打赏
  • 举报
回复
服务程序是不可以有窗口的,难道真的行,heyu1000你确定么?
heyu1000 2008-12-23
  • 打赏
  • 举报
回复
你将Application对象所在的程序集添加引用进来就可以了.
sunjunfeng5 2008-12-23
  • 打赏
  • 举报
回复
说得轻巧,我试过 用
while(true)
{
if(....)
{
break;
}
Thread.Sleep(100);

}
这种结果 程序一直卡死 没有结果,
CruelYoung123 2008-12-23
  • 打赏
  • 举报
回复
没必要呀。。。呵呵。。
doenvent()是为了响应界面。。。
xdf_hubei 2008-12-23
  • 打赏
  • 举报
回复
application.doevent不是让你用来阻塞线程的
是让window处理windows 消息
NT SERVICE没有窗体,不存在窗体句柄,也不接受WM_之类的消息
就算你引用了SYSTEM.WINDOWS.FORMS.DLL,调用这个方法,不是异常就是没反应.
你那个地方完全可以:
while(true)
{
if(....)
{
break;
}
Thread.Sleep(100);

}
sunjunfeng5 2008-12-23
  • 打赏
  • 举报
回复
much0726 你说我这样做是错的,可是我这样在在wiFrom下程序运行得很好

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧