我从数据库获取值,并尝试使用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记录数。我做了以下 步骤。
- 在Internet Explorer中,清除我访问过的网站的历史记录。
- 我尝试了你的代码。
- 得到COMException(0x80070008):没有足够的存储空间可用于处理此命令。异常被记录在41021号记录中 对我来说(Windows 7,64位)。
- 我再次尝试了你的代码,得到了一个非常相同的异常。这一次,没有添加任何记录。再次添加url记录。我有 在Internet Explorer中清除网站的历史记录。我不能 找到解决问题的方法。
醇>
对于需要了解的人,可以在this CodeProject project上找到URLhistoryWrapper的源代码。
答案 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);
}
}