У меня проблема с программой My WinApp Form, которая содержит вкладку Control с управляющей библиотекой WebBrowser (GeckoFX).
Мое приложение во время работы без каких-либо исключений. Это может произойти через несколько минут или максимум через 10 минут. В Visual Studio я вижу, как приложение завершается с кодом 0. Все, что угодно.
В program.cs я ловлю все это необработанное исключение
` // Add the event handler for handling UI thread exceptions to the event.
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(UIThreadException);
// Set the unhandled exception mode to force all Windows Forms errors to go through
// our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Add the event handler for handling non-UI thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);`
Я уже проверяю журнал событий Windows на наличие ошибок, но он чистый. Так же, как Программа хорошо завершена. Я не знаю, является ли это ошибкой Gecko DLL, но я так не думаю.
Я использую httpWebRequest для загрузки списка, который содержит некоторый URL.
Затем я использую Backgroundworker
, который читает список URL-адресов и вызывает метод делегирования addTab, немного спит, пока страница не загружается, и продолжаю с другим вызовом AddTab.
Когда список пуст, я проверяю, есть ли на странице DOM определенная строка. Затем в Backgroundworker
Complete я закрываю все вкладки и утилизирую их, и я нажимаю кнопку1, которая запускает Backgroundworker1.asyncall();
Что-то не так с моей Логикой? Я также опубликую код, мне нужно, чтобы он был слишком длинным, но мне действительно нужно понять, где может быть ошибка, которая завершает работу моего приложения. Если кто-то может помочь мне понять, почему это происходит без ошибок или чего-либо еще, я буду признателен за это.
private void Start_Back_Click(object sender, EventArgs e)
{
List<Links> tempList = getListFromWeb();
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync(tempGoogle);
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
List<Links> temp = (List<Links>)e.Argument;
foreach (Links link in temp)
{
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true; return;
}
_busy.WaitOne();
if (tabs.InvokeRequired)
{
m_addTab addTabInvoke = addTabUrl;
Invoke(addTabInvoke, new Object[] { link.url, link.StringToSearch });
}
}
Thread.Sleep(2000);
if (tabs.InvokeRequired)
{
foreach (Browser tempBrowser in ListCurrentBrowser)
{
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
_busy.WaitOne();
Thread.Sleep(1000);
m_SeachTab addSearchInvoke = addTabPSearch;
Invoke(addSearchInvoke, tempBrowser);
}
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{ //Check Stuff Error and Cancelled
if (e.Error != null)
{... }
else if (e.Cancelled)
{ ....}
else //Else remove all tab
{
bool canRemove = this.TabCount >= 1;
if (canRemove)
{
WebBrowserTabPage tab = this.SelectedWebBrowserTagPage;
this.TabPages.Remove(tab);
tab.Dispose();
}
**Start.Back.PerformClick();** //Click on button again to start another time the backgroundworker
}
* *} Тысяча двадцать-один