Thread.Start不工作

时间:2011-09-30 18:01:07

标签: c# multithreading

我正在使用以下类的函数来调用消息框。我正在使用thread.Start方法来显示消息框。问题是调用thread.Start时没有到达相应的函数。我错过了什么吗?

class MessageManager
{
  string _message;
  public MessageManager(string message)
  {
    _message = message;
  }

  public void ShowBigMessage()
  {
    Thread thread = new Thread(DisplayBigMessage);
    thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
    thread.Start();

    // thread.Join(); 
  }

  public void ShowNormalMessage()
  {
    Thread thread = new Thread(DisplayNormalMessage);
    thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
    thread.Start();
    //thread.Join(); 
  }

  private void DisplayBigMessage()
  {
    BigAppMessage appMessage = new BigAppMessage(_message);
    appMessage.Show();
  }

  private void DisplayNormalMessage()
  {
    AppMessage appMessage = new AppMessage(_message);
    appMessage.ShowDialog();
  }
}

这在线程/委托内部调用,如下所示。我将此代码添加到我的程序中,因为它正在提升

  

调用线程必须是STA,因为许多UI组件都需要   此

之前的

异常

MessageManager message = new MessageManager("This is a test message.");

                    message.ShowBigMessage();





  public partial class BigAppMessage : Window
    {
        public BigAppMessage(String message)
        {
            InitializeComponent();
            myControl.setMessage(message); // mycontrol is just user control with a                   
                                           //label on it
        }       

    }

2 个答案:

答案 0 :(得分:2)

Show()方法需要一个消息循环。修正:

  private void DisplayBigMessage()
  {
    Application.Run(new BigAppMessage(_message));
  }

ShowDialog()方法中已经内置了一个消息循环。使用线程只显示一个窗口没有任何优势,只有问题。

答案 1 :(得分:1)

在visual studio中,转到Debug-> Exceptions并检查CLR例外旁边的“抛出”框。这会告诉你问题出在哪里。可能是一个跨线程问题,因为您通常只与UI线程上的UI进行交互。