Chuỗi đã thoát với mã 0 (0x0) mà không có ngoại lệ nào được xử lý


92

Trong khi gỡ lỗi ứng dụng C # của tôi, tôi đã nhận thấy một số lượng lớn sự xuất hiện của câu sau:

Chủ đề - đã thoát với mã 0 (0x0).

Ứng dụng tiếp tục hoạt động và không có ngoại lệ nào được sửa chữa / xử lý.

Ứng dụng đang chạy trên Windows 7 64bit và được gỡ lỗi với nền tảng x86.


1
Bạn có chắc đó là chủ đề của bạn? Nếu vậy, bạn không mong đợi họ kết thúc?
SLaks

Câu trả lời:


136

Đây chỉ là thông báo gỡ lỗi. Bạn có thể tắt điều đó bằng cách nhấp chuột phải vào cửa sổ đầu ra và bỏ chọn Thread Exit Messages.

http://msdn.microsoft.com/en-us/library/bs4c1wda.aspx

Ngoài chương trình ra khỏi ứng dụng của bạn, cửa sổ Đầu ra có thể hiển thị thông tin về:

  • Các mô-đun mà trình gỡ lỗi đã tải hoặc không tải.

  • Các trường hợp ngoại lệ được ném ra.

  • Các quy trình thoát ra.

  • Chủ đề thoát ra.


9

Một ứng dụng có thể có nhiều luồng chạy song song. Một số được điều hành bởi bạn, người lập trình, một số được điều hành bởi các lớp khung (đặc biệt là nếu bạn đang ở trong môi trường GUI).

Khi một luồng đã hoàn thành nhiệm vụ của nó, nó sẽ thoát và dừng tồn tại. Tức là không có gì đáng báo động trong việc này và bạn không nên quan tâm.


Các chủ đề tôi đã thảo luận không phải của tôi (hoặc không thuộc ứng dụng của tôi). Tuy nhiên, ứng dụng của tôi cần kết nối với máy chủ Linux AIX, máy chủ này trả về với một lượng lớn quy trình không tồn tại. Tôi không biết rõ về hoạt động của máy chủ này (và nhiệm vụ của nó là gì) nhưng tôi cho rằng các luồng nói trên có thể ảnh hưởng đến hành vi của máy chủ.
Gionata

Chà, có thể các chuỗi thực sự ảnh hưởng đến ứng dụng của bạn, nhưng thông báo bạn nhận được cho bạn biết rằng họ đã kết thúc thành công. Vì vậy, bạn có thể thử và tìm lý do tại sao chúng chạy (Trình đơn gỡ lỗi => cửa sổ => chủ đề), nhưng điều này là bình thường, chúng kết thúc.
Kek

Chúng kết thúc bình thường nhưng các quy trình không tồn tại của máy chủ Linux có thể là tác dụng phụ của các luồng khung .net. Có thể ứng dụng có nhiều lỗi lập trình khác nhau trong quá trình thực hiện đa luồng. Nó có khả thi không?
Gionata

Tôi không biết. Máy chủ linuw này đang chạy .NET? sử dụng Mono? Vấn đề của bạn thực sự là gì? Các quy trình không tồn tại?
Kek

Có, các quy trình không tồn tại làm cho Máy chủ Linux gặp sự cố.
Gionata

7

Để hoàn thành câu trả lời được chấp nhận của BlueM, bạn có thể hủy kích hoạt nó tại đây:

Công cụ> Tùy chọn> Gỡ lỗi> Cài đặt đầu ra chung> Tin nhắn thoát chuỗi: Tắt


4
Câu trả lời được chấp nhận BlueM của thực sự có một giải pháp đơn giản hơn: "Bạn có thể chuyển mà tắt bằng cách nhấp chuột phải vào cửa sổ đầu ra và bỏ chọn các chủ đề kết thúc thông báo"
Simon MᶜKenzie

5

nếu ứng dụng của bạn sử dụng các luồng trực tiếp hoặc gián tiếp (tức là phía sau cảnh như trong thư viện của bên thứ 3), việc các luồng kết thúc sau khi hoàn thành là điều hoàn toàn thường xảy ra ... về cơ bản đó là những gì bạn mô tả ... trình gỡ lỗi hiển thị thông báo này ... bạn có thể định cấu hình trình gỡ lỗi để không hiển thị thông báo này nếu bạn không muốn ...

Nếu phần trên không hữu ích thì vui lòng cung cấp thêm chi tiết vì tôi không chắc chính xác vấn đề bạn đang gặp phải là gì ...


1

Khuôn khổ tạo ra các luồng để hỗ trợ mỗi cửa sổ bạn tạo, ví dụ như khi bạn tạo một Biểu mẫu và .Show () nó. Khi các cửa sổ đóng lại, các luồng sẽ kết thúc (tức là chúng sẽ thoát ra).

Đây là hành vi bình thường. Tuy nhiên, nếu ứng dụng đang tạo chuỗi và có rất nhiều thông báo thoát chuỗi tương ứng với các chuỗi này (người ta có thể biết có thể bằng tên của chuỗi, bằng cách đặt tên riêng biệt cho chúng trong ứng dụng), thì có lẽ đây là dấu hiệu của sự cố với ứng dụng tạo luồng khi không nên, do lỗi logic chương trình.

Sẽ là một sự tiếp theo thú vị nếu người đăng ban đầu cho chúng tôi biết những gì anh ấy / anh ấy đã phát hiện ra liên quan đến sự cố máy chủ bị treo. Tôi có cảm giác rằng nó sẽ không liên quan gì đến chuyện này ... nhưng thật khó để nói từ thông tin được đăng.


1

Việc thực thi các truy vấn Linq có thể tạo ra các luồng phụ. Khi tôi cố gắng thực thi mã sử dụng bộ sưu tập truy vấn Linq trong cửa sổ ngay lập tức, nó thường từ chối chạy vì không có đủ luồng cho trình gỡ lỗi.

Như những người khác đã nói, để các luồng thoát ra khi chúng kết thúc là hoàn toàn bình thường.


0

Tôi cũng đã đối mặt với vấn đề này và giải pháp là:

  1. mở Giải pháp Khám phá
  2. nhấp đúp vào tệp Program.cs

Tôi đã thêm lại mã này và chương trình của tôi chạy chính xác:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.