Để tìm thao tác nào đang chặn công tắc ngữ cảnh và khiến MDA contextSwitchDeadlock được hiển thị, bạn có thể sử dụng các bước sau. Lưu ý rằng tôi sẽ đề cập đến Visual Studio 2012.
- Tạo lại lỗi. Điều này có thể liên quan đến một số thử nghiệm và sai sót.
- Nhấp vào 'OK' thay vì 'Tiếp tục' trong trợ lý Quản lý gỡ lỗi được hiển thị.
- Đảm bảo rằng thanh công cụ Vị trí gỡ lỗi đang hoạt động bằng cách nhấp chuột phải vào vùng gắn thanh công cụ và chọn 'Vị trí gỡ lỗi'. Bạn sẽ thấy một danh sách thả xuống có nhãn 'Chủ đề' trên thanh công cụ nếu nó đang hoạt động.
- Mục được chọn trong danh sách Chủ đề thả xuống phải là một chuỗi khác với chuỗi chính vì nó sẽ là một chuỗi nền phàn nàn rằng chuỗi chính đang thu hút tất cả sự chú ý. Chọn chủ đề chính trong danh sách thả xuống.
- Bây giờ bạn sẽ thấy mã đang chặn chuyển đổi ngữ cảnh trong trình chỉnh sửa mã.
Giả sử rằng bạn quyết định không chuyển hoạt động sử dụng nhiều tài nguyên ra khỏi chuỗi chính của mình - hãy xem một số câu trả lời và nhận xét khác tại đây trước khi thực hiện - bạn có các tùy chọn sau để vô hiệu hóa Hỗ trợ gỡ lỗi được quản lý.
Trong Trình gỡ lỗi Visual Studio
- Bạn có thể vô hiệu hóa MDA trực tiếp trong hộp thoại MDA được hiển thị khi lỗi xảy ra bằng cách bỏ chọn 'Ngắt khi loại ngoại lệ này được ném'.
- Với hộp thoại Cài đặt Ngoại lệ bằng cách sử dụng các hướng dẫn bên dưới từ MSDN .
... trên menu Gỡ lỗi, bấm vào Ngoại lệ. (Nếu menu Gỡ lỗi không chứa lệnh Ngoại lệ, hãy bấm Tùy chỉnh trên menu Công cụ để thêm lệnh đó.) Trong hộp thoại Ngoại lệ, hãy mở rộng danh sách Hỗ trợ gỡ lỗi được quản lý, rồi bỏ chọn hộp kiểm Thrown cho từng MDA.
Bên ngoài Trình gỡ lỗi Visual Studio
- Khóa đăng ký (Toàn máy, Tất cả MDA bị ảnh hưởng)
- Biến môi trường (Máy rộng, MDA có thể được chỉ định)
- Cài đặt cấu hình ứng dụng (Phạm vi ứng dụng, MDA có thể được chỉ định)
Lưu ý: Một trong hai tùy chọn đầu tiên phải được đặt thành 1 để tùy chọn thứ ba có hiệu lực.
Trong trường hợp của tôi, sự cố là một cuộc gọi tới ObjectContext.SaveChanges () trong Entity Framework trong một ứng dụng bảng điều khiển. Với MTAThreadAttribute được áp dụng cho Main()
phương thức , ngoại lệ ContextSwitchDeadlock không còn được đưa ra nữa . Rất tiếc, tôi không chắc về những ảnh hưởng đầy đủ của thay đổi này.