這個問題一直讓我生氣。這裏的一般要點:F#異步顯示WPF窗口
我有一個解決方案中的兩個項目:第一個是F#控制檯應用程序,第二個是從C#+ XAML類繼承的名爲DisplayWindow
的C#庫繼承WPF窗口。 DisplayWindow
有一個方法public void SetMessage(string s) {...}
,它使窗口顯示傳遞給它的文本以閃亮的大字母,這可能也會閃爍和旋轉,並執行WPF擅長的所有操作。
問題是:從我的F#程序中,我需要編寫一個函數let openAWindow text = ???
,以便它每次調用文本時都會異步地打開一個新的DisplayWindow
。做這個的最好方式是什麼?使用async {}
或System.Threading.Thread
?感謝您的幫助:)
編輯:我發現這個博客文章http://deanchalk.com/2010/10/08/f-interacting-with-wpf-dispatcher-via-f-interactive-window/工作,但有時(?)會導致一個ArgumentException與錯誤文本「具有相同的密鑰條目已存在。所以我不知道怎麼回事有:(
我猜你有一個叫'Application.Run'主UI線程?如果是的話:如果你需要從其他線程訪問UI元素,就像這個答案中描述的那樣:http://stackoverflow.com/questions/1115132/stathread-as-async-workflow-in-f – wmeyer 2012-01-14 19:34:19
@wmeyer是的,我看了看。我找不到Async.SwitchToGuiThread方法,但只有SwitchToContext,SwitchToNewThread和SwitchToThreadPool – 2012-01-15 11:41:57
@Ciemnl SwitchToContext應該做的伎倆。你試過了嗎? – Joh 2012-01-17 16:08:10