この問題は私を怒らせています。F#WPFウィンドウを非同期で表示する
ソリューションには2つのプロジェクトがあります:最初はF#コンソールアプリケーション、もう1つはC#+ XAMLクラスのDisplayWindow
というWPFウィンドウを継承したC#ライブラリです。 DisplayWindow
には、public void SetMessage(string s) {...}
というメソッドがあります。このウィンドウには、ウィンドウにテキストが渡され、大きな光沢のある文字で表示されます。これは、おそらくフラッシュしてarroundを回転させ、WPFがうまくいくものです。
私のF#プログラムでは、という関数を作成して、テキストで呼び出されるたびに非同期的に新しいDisplayWindow
を開くようにする必要があります。これを行う最善の方法は何ですか? async {}
またはSystem.Threading.Thread
を使用していますか?助けをありがとう:)
編集:私はこのブログの投稿http://deanchalk.com/2010/10/08/f-interacting-with-wpf-dispatcher-via-f-interactive-window/が動作しますが、時には(?)エラーテキスト "ArgumentExceptionの原因と同じキーを持つエントリが既に存在する"が見つかりました。私はまず、私は(を含むWPFを初期化怠惰なサンクを書きましたが起こっていただきました!見当がつかない:(
?はいの場合:あなたは、他のスレッドからUI要素にアクセスする必要がこの回答で説明するようにそれを行う場合:http://stackoverflow.com/questions/1115132/stathread-as-async-workflow-in-f – wmeyer
@wmeyerええ、私はそれを見ました。私はAsync.SwitchToGuiThreadメソッドを見つけることができませんでしたが、SwitchToContext、SwitchToNewThread、SwitchToThreadPoolだけです。 –
@Ciemnl SwitchToContextはそのトリックを行うべきです。それを試しましたか? – Joh