Tengo un problema con el programa My WinApp Form que contiene una pestaña Control con DLL de control WebBrowser (GeckoFX).WinApp Form Crash sin ningún error o excepción .NET
Mi aplicación mientras se ejecuta cerca sin ninguna excepción ni nada. Podría ocurrir después de unos minutos o máximo después de 10 minutos. En Visual Studio veo que la aplicación termina con el código 0. Cualquier cosa.
En Program.cs capto todo esto no controlada excpetion
` // 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);`
Ya proceso de registro del registrador de eventos de Windows para cualquier error, pero está limpio. Al igual que el programa termina bien. No sé si es culpa de Gecko DLL, pero no lo creo.
Utilizo httpWebRequest para descargar una lista que contiene alguna URL.
Luego uso un Backgroundworker
que lee la lista de la URL, e invoco addTab Delegate Method Duerma un poco hasta que la página se cargue y continúe con otra AddTab Invoke.
Cuando la lista está vacía puedo comprobar si en la página de DOM hay una cierta cadena Luego, en Backgroundworker
completa que cerrar todas las pestañas y disponer de ellos y hacer clic en el botón 1, que se inicia el Backgroundworker1.asyncall();
¿Hay algo malo con mi lógica? También publicaré el código, necesito que sea demasiado largo, pero realmente necesito entender dónde podría estar el error que finaliza mi aplicación. Si alguien puede ayudarme a ver por qué falla sin ningún error ni nada, lo agradeceré.
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
}
}
Es muy poco probable que tenga un error o una excepción.El código es bastante infeliz, no hay forma de que Start.Back.PerformClick() funcione. Y ninguno de los códigos BGW realmente se ejecuta en el hilo de trabajo. Agregue un controlador de eventos para el evento FormClosing del formulario y establezca un punto de interrupción en él. –
¿Qué sugieres para crear un código mejor? ¿Podría decirme cómo puedo gestionarlo? Creo el BackGroundworker y luego? ¿Cómo puedo reiniciar backgroundworker una vez que termine? Agradecería si me puede decir cómo podría escribir un mejor código :) – user1107078
posible duplicado de [Fallos de la aplicación con "Error interno en .NET Runtime"] (http://stackoverflow.com/questions/4367664/application- crashes-with-internal-error-in-the-net-runtime) –