C# - класс UrlHistoryWrapper - недостаточно места для обработки этой команды. (Исключение из HRESULT: 0x80070008)
Я получаю значения из базы данных и пытаюсь вставить их в историю Internet Explorer, используя класс UrlHistoryWrapper. Когда я установил for
условия к чему-то из тысяч, я получу эту ошибку, однако, когда я установлю для условия for менее 100, он будет работать нормально. Я проверил использование памяти, и это не должно вызвать проблем. Как я могу сделать этот код работоспособным, если chrome.URLs и firefox.URL имеют тысячи значений?
Это мой код:
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(Строка pocsUrl, Строка pocsTitle, ADDURL_FLAG dwFlags) в UrlHistoryLibrary.UrlHistoryWrapperClass.AddURSlaySignSignSignSignSignSignSignSignSignSignSignSignSignSignSignSignSёрская правдоподобность \Users\Chris\ Documents\visual studio 2010\Projects\TestURLGUI4\TestURLGUI4\URLHistory.cs: строка 270 в Namespace.Program.SyncAll() в C:\Users\Chris\documents\visual studio 2010\ Проекты \ TestURLGUI4 \ TestURLGUI4 \ URLHistory.cs: строка 152 в TestURLGUI2.Form1.button11_Click(отправитель объекта, EventArgs e) в C:\Users\Chris\documents\visual studio 2010\Projects\TestURLGUI4\TestURLGUI4\Form1.cs: строка 247 в System.Windows.Forms.Control.OnClick(EventArgs e) в System.Windows.Forms.Button.OnClick(EventArgs e) в System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) в System.Windows.Forms.Control.WmMouseUp(Message& m, кнопка MouseButtons, щелчки Int32) в System.Windows.Forms.Control.WndProc (сообщение & m) в System.Windo ws.Forms.ButtonBase.WndProc(Message& m) в System.Windows.Forms.Button.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m) в System.Windows.Forms.Control. ControlNativeWindow.WndProc(Message& 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, 64bit).
- Я попробовал ваш код еще раз, и получил то же самое исключение. На этот раз нет записи будут добавлены. Чтобы добавить записи URL снова. Я должен очистить историю сайтов в Internet Explorer. Я не мог найти способ решить проблему.
Для тех, кому нужно знать, исходный код для URLhistoryWrapper можно найти в этом проекте CodeProject.
1 ответ
Вот решение, которое я нашел для работы. Вам нужно запустить
foreach (URL url in firefox.URLs)
{
MessageBox.Show(url.url);
urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
}
и хромированные и т. д. в другой теме. Как это:
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);
}
}