我正在使用以下类的函数来调用消息框。我正在使用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
}
}
答案 0 :(得分:2)
Show()方法需要一个消息循环。修正:
private void DisplayBigMessage()
{
Application.Run(new BigAppMessage(_message));
}
ShowDialog()方法中已经内置了一个消息循环。使用线程只显示一个窗口没有任何优势,只有问题。
答案 1 :(得分:1)
在visual studio中,转到Debug-> Exceptions并检查CLR例外旁边的“抛出”框。这会告诉你问题出在哪里。可能是一个跨线程问题,因为您通常只与UI线程上的UI进行交互。