我想要顯示一個循環的內容到我的用戶界面。首先,我不知道我這個接近(使用的WinForms)正確的做法,但這是我在做什麼:跨線程錯誤,儘管設置ApartmentState
foreach (string item in stringArray)
{
Thread thread = new Thread(delegate()
{
UpdatedResultEvent(item);
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
我希望這是足夠的信息,但如果不是,那麼我會在這裏詳細介紹一下。
我有2個類,我的Program.cs(WinForm)和另一個類叫做logicClass。我將我的Program對象的一個實例傳遞給我的logicClass。我的logicClass有一個簽名與我的Program類中的方法相匹配的委託。這是作爲一個代表通過該方法是
public void UpdateResultsOnScreen(string newContent)
{
txtResults.Text += newContent;
}
該錯誤消息是
創建的線程以外訪問跨線程操作無效:控制從一個線程 比它是在
編輯
的目標是,類似的方式ŧ他進度條的作品,就是看到Control實時更新。目前,即使它確實起作用,線程也不會將「結果」返回到屏幕,直到線程完成。
這真的很好,但它並沒有在屏幕上實時顯示我的結果。我的文本框仍然一次顯示所有內容,而不是一次填充一個項目。例如,假設每次調用UpdatedResultEvent(item)時都花費5秒(由於數據庫/ webservice調用等)。這意味着我希望我的屏幕更新5秒。 – Dave 2013-03-04 10:10:03
@DaveRook嘗試我編輯的代碼。我認爲即使是舊的代碼('Invoke')也應該按照你的期望工作和更新UI,但是如果它不起作用,我們需要知道你是如何準確地完成它的。我認爲這應該是另一個問題。 – 2013-03-04 10:20:34
是的,我已經嘗試了使用BeginInvoke(),但結果相同。如果你認爲這應該起作用,那麼也許在我的設計中哪裏是錯的! – Dave 2013-03-04 10:28:15