我在按下winforms应用程序上的按钮时尝试显示一个消息框,但MessageBox挂起并且永远不会返回值。
private void btnApply_Click(object sender, EventArgs e)
{
bool current = false;
if (cmbEmergencyLandingMode.SelectedIndex > 0)
{
if (m_WantedData != false)
{
DialogResult dr = MessageBox.Show("Are you sure you want to enable Emergency Landing mode?", "Warning!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
//i never get to this point
current = (dr == DialogResult.Yes);
}
}
if (m_WantedData == current)
{
//do something
}
else if (m_WantedData != null)
{
//do something else
}
}
编辑: 好的,所以我通过处理后台工作人员的按钮事件让它工作:
private void btnApply_Click(object sender, EventArgs e)
{
if (!bwApply.IsBusy)
bwApply.RunWorkerAsync(cmbEmergencyLandingMode.SelectedIndex);
}
void bwApply_DoWork(object sender, DoWorkEventArgs e)
{
bool current = false;
int selectedIndex = (int)e.Argument;
if (selectedIndex > 0)
{
if (m_WantedData != false)
{
DialogResult dr = MessageBox.Show(
"Are you sure you want to enable Emergency Landing mode?",
"Warning!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
current = (dr == DialogResult.Yes);
}
}
if (m_WantedData == current)
{
//do something
}
else if (m_WantedData != null)
{
//do something else
}
}
感谢所有帮助过的人!
答案 0 :(得分:1)
您是否尝试过指定消息框所有者,如下所示?
DialogResult dr = MessageBox.Show(
this,
"Are you sure you want to enable Emergency Landing mode?",
"Warning!",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
如果在消息框后面的UI发生并发更改时显示消息框,我发现应用程序的行为与此类似。如果上述方法没有帮助,请尝试通过异步处理事件来减轻UI处理(即WinAPI消息传递)的压力,如下所示。
public delegate void ApplyDelegate();
private void btnApply_Click(object sender, EventArgs e)
{
btnApply.BeginInvoke(new ApplyDelegate(ApplyAsync));
}
private void ApplyAsync()
{
bool current = false;
if (cmbEmergencyLandingMode.SelectedIndex > 0)
{
if (m_WantedData != false)
{
DialogResult dr = MessageBox.Show(
this,
"Are you sure you want to enable Emergency Landing mode?",
"Warning!",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
//i never get to this point
current = (dr == DialogResult.Yes);
}
}
if (m_WantedData == current)
{
//do something
}
else if (m_WantedData != null)
{
//do something else
}
}
答案 1 :(得分:0)
尝试在MessageBox.Show()
方法中不指定父表单的情况下显示消息。我不知道为什么但是,当我加载模态窗口时,我遇到了类似的问题。
if (m_WantedData != false)
{
if (MessageBox.Show("Sample Message", "Are you sure you want to enable Emergency Landing mode?", "Warning!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//DO YOUR STUFF HERE IF YES
}
else
{
}
}