2010-05-08 41 views
5

Để bật hộp thư, tôi đang sử dụng MessageBox.Show(...). Tôi thường quấn cuộc gọi trong Invoke:Tôi có cần gọi các cuộc gọi MessageBox không?

BeginInvoke (new Action (() => { 
    MessageBox.Show()); 
})); 

(Tôi đã gỡ bỏ một phần của câu hỏi ban đầu đã trả lời elsewhere)

Tôi luôn luôn cần phải quấn gọi MessageBox trong một (Begin-) Invoke nếu tôi đang gọi từ một chuỗi không phải GUI?

+0

Tôi đã thêm một câu hỏi mới về câu hỏi 2. (http://stackoverflow.com/questions/2819146/what-is-the-difference-between-invoking-and-begininvoking-a-messagebox) – mafu

Trả lời

1

Câu trả lời ngắn gọn: có, bởi vì tôi sẽ xem đó là phương pháp hay nhất.

Câu trả lời dài hơn:

Bạn không nên lâm vào tình huống mà bạn phải tự hỏi câu hỏi này, ít nhất là về lâu dài. Thông thường, trong một phần mềm được thiết kế tốt, bạn đã xác định "cổng" giữa giao diện người dùng và "phần còn lại của thế giới", đây cũng là nơi bạn nâng cao các sự kiện thông báo cho GUI rằng có điều gì đó phải được thực hiện (thông qua BeginInvoke (EventRaiserMethod (params))).

+0

Từ một điểm thiết kế xem, nghe có vẻ rất hợp lý và tôi đồng ý. Tuy nhiên, tôi cũng quan tâm đến câu trả lời thực tế. – mafu

+0

Xin lỗi vì không có câu trả lời hay hơn, hm ... nhưng tôi muốn nói, câu hỏi đầu tiên của bạn (về sự cần thiết) chủ yếu là câu hỏi về phong cách và giải thích. Câu hỏi là: bạn có muốn đặt câu hỏi về an toàn luồng vào tay của Microsofts không? Bạn có biết nếu họ thực sự có "Invoke" - mẫu wrapper trong "MessageBox.Show (...)" - phương pháp của họ? Nếu họ làm gì và thay đổi điều đó sau thì sao? Về câu hỏi thứ hai: Tôi hơi ngạc nhiên rằng nó không có sự khác biệt. Sẽ cố gắng sau này bản thân mình, điều này có vẻ rất thú vị. – stormianrootsolver

+0

Khoảng 2): MessageBoxes có máy bơm tin nhắn riêng của họ, tôi tin rằng đó là trách nhiệm. – mafu

0
  1. Theo như tôi biết, miễn là bạn không cung cấp thông số chủ sở hữu trong cuộc gọi đến MessageBox.Show, bạn không phải gọi cuộc gọi trên chuỗi giao diện người dùng.
    Tức là, nếu bạn cung cấp thông số chủ sở hữu, bạn phải gọi đến số MessageBox.Show trên đường đi mà chủ sở hữu đã được tạo.
    - Vui lòng sửa tôi nếu tôi nhầm -
  2. Điều đó phụ thuộc vào nếu bạn muốn chuỗi giao diện người dùng tiếp tục thực hiện hoặc nếu bạn muốn nó bị chặn trong khi hiển thị hộp thư.
Các vấn đề liên quan