2010-01-12 31 views
6

Tôi có ứng dụng GUI kết nối với bộ cảm biến, thu thập dữ liệu và xử lý dữ liệu trong nền sử dụng các chủ đề BackgroundWorker.Làm cách nào để gỡ lỗi và giải quyết sự cố 'DisconnectedContext'?

Vì nó đứng tôi đang đăng dữ liệu lên GUI bằng cách sử dụng ProgressChanged mà dường như đang hoạt động tốt để bắt đầu. Tôi đã tăng tốc độ dữ liệu và đã phát hiện ra một vấn đề; nếu phần mềm còn lại để chạy trong vài phút, lượng bộ vi xử lý sẽ tăng lên đến 100% trên cả hai máy tính của tôi và tại thời điểm đó, tôi sẽ gặp lỗi:

Trợ lý gỡ lỗi được quản lý 'DisconnectedContext' đã phát hiện ra sự cố trong 'myapp.exe'. Thông tin bổ sung: Ngữ cảnh 0xe2ba0 bị ngắt kết nối. Phát hành các giao diện từ ngữ cảnh hiện tại (context 0xe2d10). Điều này có thể gây ra tham nhũng hoặc mất dữ liệu.

Tôi đã đọc một số nội dung trên web cho thấy điều này có thể xảy ra nếu ứng dụng GUI không thể bơm tin nhắn đủ nhanh. Tôi đã nhận thấy tôi có thể kích động vụ tai nạn tương tự xảy ra nhanh hơn nếu tôi thay đổi kích thước cửa sổ một cách nhanh chóng (tức là bơm thêm tin nhắn) hỗ trợ lý thuyết tôi nghĩ?

Vì vậy, câu hỏi ở đây là:

  1. Cho dù bất cứ ai cũng đồng ý với giả thuyết của tôi về thông báo bơm?
  2. Có giải thích nào khác không?
  3. Có cách nào tôi có thể chứng minh điều đó (xem số lượng thư trong hàng đợi có thể) không?
  4. Có phải tất cả các mùi mã xấu này đều cho thấy tôi đang đi sai hướng này không?

Mọi lời khuyên sẽ rất biết ơn.

Trả lời

3

Loại âm thanh này giống như một vấn đề rất cụ thể và tôi nghĩ đó là lý do tại sao chưa có ai trả lời nhưng tôi nghĩ tôi có thể giúp câu hỏi # 3.

Spy++ sẽ có thể xem thông báo chuyển đến cửa sổ của bạn. Tôi nghĩ rằng bạn có thể sử dụng nó để xem các tin nhắn bơm vào GUI của bạn và làm thử nghiệm thay đổi kích thước của bạn. Nếu bạn thấy số lượng thư lớn đang cố gắng xử lý, nó có thể xác nhận giả thuyết của bạn.

Là một sang một bên, tôi đã đọc rằng bạn có thể thay đổi căn hộ chủ đề chính từ STAThread thành MTAThread để làm cho MDA này biến mất.

Perphaps bạn có thể sửa đổi ứng dụng của bạn để nhổ các cảm biến đọc ra một tệp hoặc xếp hàng chúng trong một cơ chế khác thay vì cập nhật GUI liên tục. HTH.

+1

Tôi đã thử cài đặt MTathread mà dường như chỉ thêm một sự cố không thường xuyên. Thay vào đó, tôi đã sử dụng một cơ chế xếp hàng và fonud một lỗi trong một phần của mã hiển thị đã được điền đầy đủ một 'RichTextBoxControl'. Giữa hai thứ đó, có vẻ như tôi đã giải quyết được vấn đề. Cảm ơn những lời đề nghị. –

+0

Tôi đã thấy điều này xảy ra thêm một vài lần và nó chắc chắn được kích hoạt bằng cách cố gắng gửi quá nhiều yêu cầu 'ProgressChanged' từ luồng sản xuất dữ liệu đến người nghe của nó. –

Các vấn đề liên quan