У меня есть приложение, которое использует элемент управления Webbrowser для перехода на несколько сайтов поставщиков и очистки отчетов. Поскольку у одного поставщика есть несколько учетных записей, мне нужно, чтобы браузер завершил сеанс и удалил все установленные куки. Я использую вызовы API для wininet.dll для обоих и могу достичь желаемого результата. Однако время от времени я получаю то, что кажется тупиковым в InternetSetOption для INTERNET_OPTION_END_BROWSER_SESSION.
Это очень линейный код, и InternetSetOption вызывается из одного потока в одном месте. Трудно понять, что, работая в режиме отладки, я очень редко смог воспроизвести проблему. Как только я компилирую и запускаю за пределами VS, это произойдет вскоре после этого. Я изолировал это от того, что качал сообщения на консоль во время работы.
Несколько раз мне удавалось поймать проблему во время отладки, он просто показывает InternetSetOption в качестве следующего оператора и сидит, без исключений или ошибок, ничего в окне вывода. InternetSetOption должен вернуть логическое значение, но программа не пойдет дальше, и я никогда не получу никакого возврата от вызова API. Я попытался взглянуть на последнее выданное сообщение об ошибке, но в этом случае это не помогает, поскольку он никогда не выдает ошибку.
Кто-нибудь может сказать, что я могу сделать для отладки?
Объявлен как:
[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool InternetSetOption(
IntPtr hInternet,
int dwOption,
IntPtr lpBuffer,
int lpdwBufferLength);
И вызывается по:
InternetSetOption(IntPtr.Zero, 42, IntPtr.Zero, 0);