我想创建一个“调试窗口”或“输出窗口”使用Windows窗体,所以如果在用户输入中有一些错误,我可以在这个“输出窗口”显示错误,代码和下面的问题:创建一个输出窗体C#
public partial class DebugWindow : Form
{
public DebugWindow()
{
InitializeComponent();
}
public void WriteDebugWindow(string text)
{
DateTime dt = DateTime.Now;
text = dt.ToString("[yyyy-MM-dd HH:mm:ss] ") + text;
listBox1.Items.Add(text);
}
}
和类
public class Debug
{
DebugWindow debugWindow;
public Debug() { debugWindow = new DebugWindow(); }
public void WriteDebugWindow(string text)
{
this.debugWindow.WriteDebugWindow(text);
OpenWindow();
}
public void OpenWindow()
{
if (debugWindow.Visible)
debugWindow.BringToFront();
else
debugWindow.Show(); //Problem here
}
}
所以,如果我尝试运行像代码:
int i = 10;
Debug.WriteDebugWindow(i.ToString());
i = 20;
Debug.WriteDebugWindow(i.ToString());
它会将文本写入列表框,但如果我使用“.Show()”调试窗口打开,但它冻结,我不能关闭/移动/等,如果我使用“.ShowDialog()”它不冻结,但它会将i设置为20,并且只有在关闭“调试窗口”窗体时才会再次打印。
有一个解决方案吗?因为我尝试了一切,在一个线程中运行它,创建一个新的姿态等等,但是probem仍然存在,因为我想在将来的“Debug.Write ...”调用中保留listBox项目,我不希望每次都有一个空白的listBox我称它(在使用新的DebugWindow()的情况下)。
谢谢。
如果你想更新用户界面,你不需要屏蔽你的UI线程。如果您长时间运行非UI工作,请在非UI线程中执行此操作。 – Servy 2015-01-26 21:21:05
我试图在WriteDebugWindow()方法中添加一个线程,但它打开并关闭第二个窗体(debugWindow) – Kyore 2015-01-27 12:21:56
不要尝试创建第二个UI线程。这是一个可怕的想法,只会导致你在进一步的问题。而是停止在UI线程中执行非UI工作,并在非UI线程中执行非UI工作。让你的UI在非UI线程中工作,你的UI线程中的非UI工作只会引起头痛。 – Servy 2015-01-27 14:49:46