我想創建一個「調試窗口」或「輸出窗口」使用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