我想將文本寫入文本框。爲了能夠從不同的線程做到這一點,我調用了一個靜態方法,它調用一個持有調用和文本框寫入的非靜態方法。當這樣做。我得到的錯誤,它不能調用,直到設置了窗口句柄,所以我設置它。我的問題是,是的調用循環/崩潰
if (!this.IsHandleCreated)
this.CreateHandle();
下面
在代碼中的位置是唯一的一個,我的程序不會崩潰,但現在它的循環(indefinetly)只有BeginInvoke的代碼,但實際上不是文本設置代碼如下。我究竟做錯了什麼?
代碼:
private void ActualLog(string input)
{
var currentForm = form as Main;
if (!this.IsHandleCreated)
this.CreateHandle();
if (currentForm.txtServerLog.InvokeRequired)
{
this.BeginInvoke(new Action<string>(ActualLog), new object[] { input });
return;
}
else
{
currentForm.txtServerLog.Text += input + "\r\n";
currentForm.txtServerLog.Refresh();
}
}
public static void Log(string input)
{
Main main = new Main();
main.ActualLog(input);
}
從我的線程,我會叫Log("Any String");
@JanH。我不是100%確定你想要做什麼,但我已經在上面添加了一個樣本。 – furkle 2014-11-01 18:16:14
謝謝!在你的例子中,當使用Invoke而不是BeginInvoke時,它起作用。具有這兩個函數的東西只是讓我可以從annother Thread中調用Log(),因爲Invoke在靜態函數中是不允許的(所以我只是把它放在非靜態函數中,並從靜態函數中調用它)。不過謝謝:) – 2014-11-01 19:44:10
@JanH。啊,我花了更多的時間在WPF上比WinForms,所以我對Invoke/BeginInvoke的區別有點生疏。很高興聽到它的幫助! – furkle 2014-11-01 19:45:08