我有一个主窗体,其中包含一个占据整个窗体的编辑控件。还有另一个工作线程不断地将日志消息写入此编辑控件。现在,我想在主 UI 的编辑控件显示内容时显示一个仅带有取消按钮的对话框。问题是取消对话框没有响应,而更新正在其后面发生,并且我无法单击取消按钮。关于如何解决它的任何想法。我正在考虑创建另一个 UI 线程并显示其中的取消按钮。还有其他选择吗?
编辑#1
- 我应该澄清一下,我已经使用工作线程来完成这项工作。
- DisplayLogs() 在单独的线程中。
- 从其他线程调用 DisplayLogs()。
- LogMessage 是指向主 UI 中 UpdateMessage 方法的委托(delegate)。
- 使用的控件是 TextBox。我尝试过其他控件,例如 ListView , richtextboxsand 等仍然是相同的结果。
工作线程
void DisplayLogs()
{
lock (this)
{
while (logQueue.Count > 0)
{
string logMessagemessage = logQueue.Dequeue();
LogMessage(string.Concat(logMessagemessage, Environment.NewLine));
}
}
}
主界面
public void UpdateMessage( string message)
{
if (!txtLog.IsHandleCreated)
{
return;
}
if (txtLog.InvokeRequired)
txtLog.BeginInvoke( new UpdateLogDelegate( UpdateLog), message);
else
txtLog.AppendText(message);
}
最佳答案
主要解决方案是将昂贵的代码卸载到后台工作人员上,并让您的 UI 线程响应 UI 操作。然后,您的表单可以简单地显示模式对话框或其他内容。
关于c# - Winforms C# - 主 UI 线程繁忙时显示取消对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230337/