我有一個Windows窗體對話框,在一個較長的操作是BackgroundWorker的作業中運行(asynchron)。在此操作過程中,我想更改表單上的一些值(標籤,...)。但是當背景工作者試圖改變窗體上的東西時,我得到錯誤「跨線程操作無效」!這個問題怎麼解決?如何解決「跨線程操作無效」問題?
1
A
回答
3
呼叫從工人的ReportProgress
方法,並處理ProgressChanged
來更新當前狀態。
2
檢查是否需要調用,然後調用BeginInvoke。
private void AdjustControls()
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(this.AdjustControls));
}
else
{
label1.Text = "Whatever";
}
}
1
我覺得有些不可思議這裏tooting我自己的號角,但你會發現從ThreadSafeControls庫我寫了整整爲此一些使用。
1
您不能直接在不創建它們的線程內部更改控件。您可以使用如上所示的invoke方法,也可以使用BackgroundWorker ProgressChanged事件。 BackgroundWorker的DoWork的內部使用
代碼:BackgroundWorker的ProgressChanged內使用
myBackgroundWorker.ReportProgress(50); // Report that the background worker has got to 50% of completing its operations.
代碼:
progressBar1.Value = e.ProgressPercentage; // Change a progressbar on the WinForm
相關問題
- 1. 如何解決「跨線程操作無效」?
- 2. 如何解決跨線程操作
- 3. 跨線程操作無效
- 4. 跨線程操作無效
- 5. 跨線程操作無效
- 6. 跨線程操作無效
- 7. 跨線程操作無效
- 8. 跨線程操作無效
- 9. 跨線程操作無效:
- 10. 線程安全問題:跨線程操作無效
- 11. VB.NET [跨線程操作無效:控制'txtIncomingText'從線程訪問........]
- 12. c# - 跨線程操作無效ListView
- 13. BackgroundWroker跨線程操作無效
- 14. VB.NET跨線程操作無效
- 15. C#Console.SetOut跨線程操作無效
- 16. C#跨線程操作無效
- 17. 跨線程操作無效錯誤
- 18. .NET BackGroundWorker - InvalidOperationException:跨線程操作無效
- 19. 獲取跨線程操作SetWindowPos()無效
- 20. VB.net跨線程操作無效
- 21. BackgroundWorker with ProgressBar - 跨線程操作無效
- 22. 「跨線程操作無效」的行爲
- 23. BackgroundWorker - 跨線程操作無效
- 24. 錯誤:System.InvalidOperationException:跨線程操作無效
- 25. 無效的跨線程訪問問題
- 26. 跨線程問題仍未解決()
- 27. 跨線程操作無效AMD試圖找到一個解決方案
- 28. 如何解決這個問題==跨線程操作無效:控制'frm_proc'從其創建的線程以外的線程訪問
- 29. 跨線程操作無效的無效圖形對象
- 30. 通過SerialPort.Read()獲取跨線程操作無效無效
這是這裏解釋:http://msdn.microsoft.com/en-我們/庫/ ms993020 – 2010-07-19 13:05:54
更好地從這裏開始:http://msdn.microsoft.com/en-us/library/ms951089 在系列的開始! – 2010-07-19 16:10:26