这个问题一直让我生气。这里的一般要点: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