簡體   English   中英

創建一個不會停止代碼的MessageBox?

[英]Creating A MessageBox That Doesn't Stop Code?

好的,我正在尋找一些非常簡單的東西:創建一個不會停止我的代碼的MessageBox。

我猜我必須創建一個不同的線程或什么? 請告知最佳方法。

謝謝!

您可以通過在單獨的線程上調用它來啟動另一個消息泵。 MessageBox.Show泵消息,因此無需調用Application.Run即可安全。

public void ShowMessageBox()
{
  var thread = new Thread(
    () =>
    {
      MessageBox.Show(...);
    });
  thread.Start();
}

編輯:

我可能應該提一下,我不建議這樣做。 它可能會導致其他問題。 例如,如果您有兩個線程在傳遞消息,那么消息框可能會卡在另一個表單后面,如果表單正在等待某人關閉消息框,則無法使其消失。 你真的應該試圖找出解決問題的另一種方法。

不,您將不得不制作自己的消息框表單。 MessageBox類僅支持類似於.ShowDialog()行為,這是一種模態操作。

只需創建一個帶有參數的新表單,然后根據自己的喜好使用這些參數構建樣式化的消息框。


更新2014-07-31

本着通過谷歌發現這一點的任何其他人保持清晰的精神,我想花一點時間來解釋一下這個:

在引擎蓋下, MessageBox是圍繞Windows SDK user32.dll MessageBox函數的一個奇特的C#Wrapper,因此行為完全相同(在將.NET Enums轉換為在系統調用中表示相同內容的整數之后)。

這意味着當您調用MessageBox.Show() ,調用將被封送到操作系統並阻止當前線程,直到選擇了一個選項或窗口被終止。 為了防止代碼被暫停,您需要在單獨的線程上啟動消息框,但這將意味着將返回從消息框返回的任何結果( / / 確定 / 取消 /等等...)到負責調用消息框的單獨線程。

如果你按照這種方式啟動此消息框的結果,你必須將結果發送回UI Thread for Thread Saftey。

或者,您可以在WinForms / WPF中創建自己的消息框表單,並使用.Show()方法調用它。 按鈕上的任何單擊事件都將在UI線程上執行,您不必將調用分派回UI線程來操縱UI中的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM