【问题标题】:Open multiple-tabs in IE9 using Process使用 Process 在 IE9 中打开多个选项卡
【发布时间】: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);
                        }
                    }

【问题讨论】:

    标签: c# internet-explorer-9


    【解决方案1】:
    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);
            }
        }
    }
    

    【讨论】:

    • 如果你让 Thread.Sleep 的时间短于大约 1000 毫秒,则不起作用,所以我认为它仍然没有做正确的事情。 (如果目标计算机真的很慢怎么办?)
    • 我怀疑你的程序没有用户界面?
    • 程序是否有 UI 有区别吗?
    • @tofutim:抱歉,我误读了 WaitForInputIdle 函数的一些文档。忽略我最后的评论。
    【解决方案2】:

    不完全符合您的要求,但我找到了this

    ie 的command line switches 似乎不支持启动选项卡:/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-17
      • 2019-07-04
      • 2014-07-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      相关资源
      最近更新 更多