我有一種方法利用SendKeys.Send
,等待幾秒鐘,使用System.Threading.Thread.Sleep
,然後運行另一種方法來檢查像素的顏色以查看它是否已更改。然後該方法再次運行,因爲它是遞歸調用的。遞歸方法在UI上施加應變
此方法需要能夠在停止前運行數千次。運行時,Winform的用戶界面似乎停止響應。
我試圖實現一個後臺工作來消除UI的壓力。我搬到了遞歸方法的代碼移交給Do_Work
事件,並與RunWorkerAsync
叫,但它墜毀,報告如下:
An exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll but was not handled in user code
Additional information: SendKeys cannot run inside this application because the application is not handling Windows messages.
什麼是從UI移動碼遠的最佳方式?我對背景工作人員不是很熟悉,所以我可能做錯了。
你可以使用後臺工作者,只需使用'Invoke(new Action(SendKeys.Send),keys)'在UI線程上分派調用。 –
Lou
BGW不會幫你在這裏。 BGW存在移動長時間運行,** CPU綁定**,*非UI *任務到另一個線程。你有一個長期的* IO綁定*,* UI *操作在你的手中。 – Servy