Vì lợi ích của đối số, hãy xem xét một chuỗi giao diện người dùng là một chuỗi đã có cuộc gọi đến Application.Run()
hoặc một trong những quá tải của nó được gọi trên đó và có một vòng lặp tin nhắn đang hoạt động đang chạy.Cách phát hiện xem chúng tôi có đang ở trên một chuỗi giao diện người dùng không?
Có cách nào để phát hiện nếu chúng tôi hiện đang thực hiện trên một chuỗi không?
Lý do tôi muốn điều này là do tôi có một lớp học có chức năng riêng tư dài hạn. Bản thân lớp đã được đa luồng và việc sử dụng lớp này là như vậy mà nó có thể được sử dụng từ giao diện người dùng hoặc từ các chủ đề nền đang xử lý. Chức năng này cũng rơi vào lưới này. Nhưng tôi không muốn nó chặn luồng UI. Vì vậy, tôi muốn phát hiện nếu tôi đang chạy trên một thread UI và nếu như vậy, ngã ba cuộc gọi chức năng thành một chủ đề nền (có thể là ThreadPool
, nhưng đó là một vấn đề không cho cuộc thảo luận này). Điều này hoàn toàn được xử lý tốt, nhưng các chủ đề nền có thể dựa vào đầu ra của hàm, vì vậy việc chặn chúng là tốt hơn, trong khi luồng giao diện người dùng đang truy cập nó theo cách "đặt và quên" hơn.
Khởi động không nhất thiết phải là luồng GUI, hoặc chỉ là luồng GUI. –
WRONG: InvokeRequired trả về true nếu trên một "thread khác với thread được tạo trên" –
@Rico: Vâng, tất nhiên. Tôi không thể tin rằng typo đã ngồi đó trong ba năm qua và không ai nhận thấy. Cảm ơn bạn đã bắt nó, tôi đã cập nhật câu trả lời cho phù hợp. –