У меня проблема с программой My WinApp Form, которая содержит вкладку Control с управляющей DLL-библиотекой WebBrowser (GeckoFX).
Мое приложение работает без каких-либо исключений или чего-либо еще. Это может произойти через несколько минут или максимум через 10 мин. В визуальной студии я вижу, что приложение заканчивается кодом 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 Invoke.
Когда список пуст, я проверяю, есть ли на странице DOM определенная строка. Затем в Backgroundworker
Завершить, я закрываю все вкладки и удаляю их, и я нажимаю кнопку 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
}
}