Tôi gặp vấn đề với chương trình My WinApp Form có chứa tab Control với WebBrowser control DLL (GeckoFX).WinApp Form Crash Không có bất kỳ lỗi hoặc ngoại lệ nào .Net
Ứng dụng của tôi trong khi chạy gần mà không có bất kỳ ngoại lệ hoặc bất kỳ điều gì. Nó có thể xảy ra sau vài phút hoặc tối đa sau 10 phút. Trong phòng thu trực quan, tôi thấy ứng dụng chấm dứt bằng mã 0. Bất kỳ điều gì.
Trong program.cs tôi bắt tất cả excpetion unhandled này
` // 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);`
Tôi đã kiểm tra trong Windows Event logger cho bất kỳ lỗi nhưng nó sạch. Cũng giống như Chương trình được chấm dứt tốt. Tôi không biết nếu đó là lỗi Gecko DLL nhưng tôi không nghĩ vậy.
Tôi sử dụng httpWebRequest để tải xuống danh sách chứa một số URL.
Sau đó, tôi sử dụng Backgroundworker
để đọc danh sách URL và gọi phương thức ủy nhiệm addTab Ngủ một chút cho đến khi trang được tải và tiếp tục với AddTab Invoke khác.
Khi danh sách là rỗng tôi kiểm tra xem trong trang DOM có một chuỗi nhất định Sau đó, trong Backgroundworker
Complete Tôi Đóng tất cả các tab và Vứt bỏ họ và tôi bấm vào button1 mà bắt đầu Backgroundworker1.asyncall();
Có điều gì sai trái với Logic của tôi? Tôi cũng sẽ đăng mã, tôi cần nó quá dài nhưng tôi thực sự cần hiểu nơi nào có thể là lỗi chấm dứt đơn đăng ký của tôi. Nếu ai đó có thể giúp tôi để xem tại sao nó sụp đổ mà không có bất kỳ lỗi hoặc bất cứ điều gì tôi sẽ đánh giá cao điều đó.
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
}
}
Rất khó bạn thực sự gặp lỗi hoặc ngoại lệ.Mã này khá không hài lòng, không có cách nào mà Start.Back.PerformClick() có thể hoạt động. Và không có mã BGW nào thực sự chạy trên chuỗi công nhân. Thêm một trình xử lý sự kiện cho sự kiện FormClosing của biểu mẫu và thiết lập một điểm ngắt trên nó. –
Bạn đề nghị tạo mã nào tốt hơn? Có thể cho tôi biết làm thế nào tôi có thể quản lý nó? Tôi tạo BackGroundworker và sau đó? Làm thế nào tôi có thể khởi động lại backgroundworker khi nó chấm dứt? Tôi sẽ đánh giá cao nếu bạn có thể cho tôi biết làm thế nào tôi có thể viết một mã tốt hơn :) – user1107078
có thể trùng lặp của [Ứng dụng sự cố với "Lỗi nội bộ trong .NET Runtime"] (http://stackoverflow.com/questions/4367664/application- bị lỗi-với-nội-lỗi-trong-mạng-thời gian chạy) –