【发布时间】:2011-09-06 13:29:28
【问题描述】:
我试图在同一个 IE9 会话中打开多个网页。似乎在打开第一个 url 后我必须等待一段时间才能打开其余的,但是使用 Thread.Sleep 似乎很不自然。有什么办法可以做得更好吗?
foreach (string url in urls)
{
try
{
if (!isLaunched)
{
Process p = new Process();
p.StartInfo.FileName = browser;
p.StartInfo.Arguments = url;
p.Start();
Thread.Sleep(1000); // somewhere between 500 and 1000
isLaunched = true;
}
else
{
Process.Start(url);
}
}
}
注意:如果我不等待时间,我将在一个浏览器会话中结束一个页面(最后一页。
更新: - 我试过 p.WaitForInputIdle() 但它没有用。 - 每http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/fe4be58f-9c9d-4e52-8ced-e3cd9c1bbee7我也试过了
int i = 0;
while (i == 0)
{
Console.WriteLine("!$@!");
Thread.Sleep(100);
p.Refresh();
i = p.MainWindowHandle.ToInt32();
}
但出现错误:
Process has exited, so the requested information is not available.
at System.Diagnostics.Process.EnsureState(State state)
at System.Diagnostics.Process.get_MainWindowHandle()
更新 2: 下面的代码有效(等待 IE9 启动退出),但仍然需要 Thread.Sleep(100)。再少一点,它有时只会把一部分网站放在上面......不......从头开始,这只有在已经有 IE 会话的情况下才有效。进程退出,因为它将 url 移交给现有的 IE 会话。
foreach (string url in urls)
{
try
{
if (!isLaunched)
{
Process p = new Process();
p.StartInfo.FileName = browser;
p.StartInfo.Arguments = url;
p.Start();
p.WaitForExit();
Thread.Sleep(100);
isLaunched = true;
}
else
{
Process.Start(url);
}
}
【问题讨论】: