C# 使用Process在IE9中打开多个选项卡
我试图在同一个IE9会话中打开多个网页。在打开第一个url之后,我似乎需要等待一段时间才能打开其余的url,但是使用Thread.Sleep似乎有点黑客味。我有什么办法可以做得更好吗C# 使用Process在IE9中打开多个选项卡,c#,internet-explorer-9,C#,Internet Explorer 9,我试图在同一个IE9会话中打开多个网页。在打开第一个url之后,我似乎需要等待一段时间才能打开其余的url,但是使用Thread.Sleep似乎有点黑客味。我有什么办法可以做得更好吗 foreach (string url in urls) { try { if (!isLaunched) { Process p = new Process(); p.StartInfo.FileName = brow
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.waitForInputId(),但没有成功。
-我也试过了
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);
}
}
不完全是你要的,但我找到了
for ie似乎不支持启动选项卡:/如果你使用线程,则无法工作。睡眠时间短于1000毫秒,因此我认为它仍然没有做正确的事情。(如果目标计算机真的很慢怎么办?)那么,我怀疑你的程序没有用户界面?程序是否有用户界面会有区别吗?@tofutim:对不起,我误读了WaitForInput函数的一些文档。忽略我最后的评论。
foreach (string url in urls)
{
try
{
if (!isLaunched)
{
Process p = new Process();
p.StartInfo.FileName = browser;
p.StartInfo.Arguments = url;
p.Start();
if(!p.WaitForInputIdle()){ //Should wait indefinitely until the
//process is idle
Thread.Sleep(1000);// Just in case the process has no message loop
}
isLaunched = true;
}
else
{
Process.Start(url);
}
}
}