Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Process在IE9中打开多个选项卡_C#_Internet Explorer 9 - Fatal编程技术网

C# 使用Process在IE9中打开多个选项卡

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

我试图在同一个IE9会话中打开多个网页。在打开第一个url之后,我似乎需要等待一段时间才能打开其余的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.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);
        }
    }
}