WebBrowser и Invoke в BackGroundWorker Crash - PullRequest
0 голосов
/ 22 января 2012

Я сделал вопрос о сбое моего приложения без причины, и я получаю только с кодом выхода -2146233082 (0x80131506) ничего больше (видел сегодня).Поэтому я спросил о StackOverflow, и кто-то сказал мне, что причиной ошибки является код внутри BackGroundWorker

, который не может работать Start.Back.PerformClick ().И ни один из кодов BGW на самом деле не выполняется в рабочем потоке.

.Так что я изменяю его, но я бы знал, нормально ли это или нет, потому что он все еще падает без каких-либо исключений и чего-либо (я видел в журнале событий Windows и я ловлю необработанное исключение), я получаю только этот код -2146233082 (0x80131506) и ничего более, ниСобытие закрытия или закрытия формы сработало, оно остановилось.,

Я использую в качестве браузера "GeckoFX"

Здесь СТАРЫЙ код

   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();

                AddTabSafeThread(link.url); 

            }
            Thread.Sleep(1000); 

            SearchSafeThread(ListToSearch); 
       }


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 
}
    private void AddTabSafeThread(Browser tempBrowser)
    { 
        if (this.tabs.InvokeRequired)   //TabControl is tabs
        {

        this.tabs.Invoke(new m_SafeTab(AddTabSafeThread), new object[] { tempBrowser });
        }
        else
         //in TabControl Class i create the WebBrowser And i call Navigate
        {   this.tabs.addTab(tempBrowser.url);    
              //Do Stuff
        }
...