我有一個WPF應用程序。 我有一個簡單的用戶界面與幾個文本框。 每個文本框更新使用函數 - Updatefirst(字符串味精)和updateSecond(字符串味精)從2個回調函數更新WPF UI的死鎖
我有2個線程,回調到我的用戶界面。 每個回調帶有數據 一次我處理完的數據 - 我想更新這兩個文本框,我不喜歡這樣寫道:
lock (updatescreenlock)
{
Dispatcher.Invoke(new UpdatefirstCallBack(this.Updatefirst), Log.ToString());
}
和
lock (updatescreenlock)
{
Dispatcher.Invoke(new updateSecondCallback(this.updateSecond), str);
}
我對速度沒有控制那些回調來的。 ,所以我可以在一秒鐘內得到5-10個回調。大多數情況下一切正常,但有時我會陷入僵局。 一個進程卡在Dispacher.Invoke中,其他進程卡在鎖定線中。
我在這裏做錯了什麼?
*** UPDATE 1:
的更新功能只包含txtbox.text更新: 這樣的 - txtCommand.Text =消息; 他們不會調用任何其他方法,除了txtBox.text =「staff」以外的任何其他方法。
**更新2: 使用BeginInvoke而不是Invoke使死鎖看起來更遠,但最終我再次擊中它。
**更新3:更新功能代碼:
private void UpdateFirst(string message)
{
txtTimer.Text = myTime.ToString();
txt1.Text = val1.ToString();
txt2.Text = val2.ToString();
txt3.Text = val3.ToString();
txt4.Text = val4.ToString();
txt5.Text = val5.ToString();
txt1.Text = val6.ToString();
//if (message.Length > 0)
AddLogText(message);
}
private void AddLogText(string message)
{
string tmp = txtResults.Text;
txtResults.Text = DateTime.Now.ToLongTimeString() + "\n" + message + "\n" + tmp;
}
你可以顯示你的Updatefirst和updateSecond方法的代碼嗎?我的第一個猜測是,你在一個循環中用戶輸入textbox1並觸發Changed事件,然後設置textbox2的文本並遞歸觸發其事件。 –
更新了更新函數只是更新文本框的問題。 – Dani
此代碼被調用的地方是什麼?你有一個TextChanged事件處理程序嗎? –