C# - UrlHistoryWrapper类 - 没有足够的存储空间来处理此命令。 (HRESULT异常:0x80070008)

时间:2012-07-30 20:53:09

标签: c# error-handling comexception

我从数据库获取值,并尝试使用UrlHistoryWrapper类将它们插入Internet Explorers历史记录中。当我将for条件设置为成千上万的时,我会得到这个错误,但是,当我将for条件设置为小于100时,它将正常运行。我已经检查了内存使用情况,它应该没有问题。如果chrome.URLs和firefox.URLs有数千个值,我该如何才能运行此代码呢?

这是我的代码:

UrlHistoryWrapperClass urlHistory;
        UrlHistoryWrapperClass.STATURLEnumerator enumerator;
        List<STATURL> list = new List<STATURL>();
        urlHistory = new UrlHistoryWrapperClass();
        enumerator = urlHistory.GetEnumerator();
        bool display = false;
        chrome.GetHistory(display);
        for (int i = 0; i < chrome.URLs.Count; i++ )
        {
            URL url = chrome.URLs[i];
            urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
        }
        Firefox firefox = new Firefox();
        firefox.GetHistory(display:false);
        foreach (URL url in firefox.URLs)
        {
            MessageBox.Show(url.url);

            urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
        }

这是我的错误:

  

** * ** 异常文字 ** * ****   System.Runtime.InteropServices.COMException(0x80070008):还不行   存储可用于处理此命令。 (HRESULT的例外情况:   0x80070008)在UrlHistoryLibrary.IUrlHistoryStg2.AddUrl(String   pocsUrl,String pocsTitle,ADDURL_FLAG dwFlags)at   UrlHistoryLibrary.UrlHistoryWrapperClass.AddHistoryEntry(字符串   pocsUrl,String pocsTitle,ADDURL_FLAG dwFlags)at   C:\ Users \ Chris \ documents \ visual studio中的Namespace.IE.SyncIE()   2010 \ Projects \ TestURLGUI4 \ TestURLGUI4 \ URLHistory.cs:第270行   C:\ Users \ Chris \ documents \ visual studio中的Namespace.Program.SyncAll()   2010 \ Projects \ TestURLGUI4 \ TestURLGUI4 \ URLHistory.cs:第152行   TestURLGUI2.Form1.button11_Click(Object sender,EventArgs e)in   C:\ Users \ Chris \ documents \ visual studio   2010 \ Projects \ TestURLGUI4 \ TestURLGUI4 \ Form1.cs:第247行   System.Windows.Forms.Control.OnClick(EventArgs e)at   System.Windows.Forms.Button.OnClick(EventArgs e)at   System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)at at   System.Windows.Forms.Control.WmMouseUp(Message&amp; m,MouseButtons   按钮,Int32点击)at   System.Windows.Forms.Control.WndProc(Message&amp; m)at   System.Windows.Forms.ButtonBase.WndProc(Message&amp; m)at   System.Windows.Forms.Button.WndProc(Message&amp; m)at   System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m)   在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;   m)在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32)   msg,IntPtr wparam,IntPtr lparam)

编辑:

这是我的新代码:

    for (var i = 0; i < firefox.URLs.Count; i++ )
    {
        URL url = firefox.URLs[i];
        urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
        Thread.Sleep(3);
        form.label1.Text = i + "/" + firefox.URLs.Count;
      //  MessageBox.Show(url.url);
        Application.DoEvents();
    }

现在,使用此代码,我可以在不收到此错误的情况下升至8447,但随后会被抛出。

我有其他人试图这样做,这就是他所说的:

  

刚试过你的代码而且似乎有一个限制   可以添加的URL记录数。我做了以下   步骤。

     
      
  1. 在Internet Explorer中,清除我访问过的网站的历史记录。
  2.   
  3. 我尝试了你的代码。
  4.   
  5. 得到COMException(0x80070008):没有足够的存储空间可用于处理此命令。异常被记录在41021号记录中   对我来说(Windows 7,64位)。
  6.   
  7. 我再次尝试了你的代码,得到了一个非常相同的异常。这一次,没有添加任何记录。再次添加url记录。我有   在Internet Explorer中清除网站的历史记录。我不能   找到解决问题的方法。
  8.   

对于需要了解的人,可以在this CodeProject project上找到URLhistoryWrapper的源代码。

1 个答案:

答案 0 :(得分:3)

这是我发现的解决方案。你需要运行

foreach (URL url in firefox.URLs)
    {
        MessageBox.Show(url.url);

        urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
    }

和另一个线程中的chrome等。像这样:

Thread testthread = new Thread(SynceFirefoxToIE);
        testthread.Name = "FirefoxToIESynceThread";
        testthread.Start();


    }

    public void SynceFirefoxToIE() 
    {
        foreach (URL url in firefox.URLs)
      {

         urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
      }

    }