WPFで時間軸に沿ってユーザにウインドウを表示したいと思いこんなソースを書いたのですがうまく動きません.
こういったことをやりたい場合どのようにするのが良いのでしょうか.
よろしくお願いいたします.
Task.Runにこだわっているわけではありません.私の知識ではこれを使うくらいしかひねり出せなかったためTask.Runを使用しています.
###やりたいこと
Startボタンを押すと,
MyWindow1が開く
↓
1秒後にMyWindow1が閉じる
※MyWindow1は自分で追加した新しいウインドウです.
↓
X秒後にMyWindow2が開く…
↓
Y秒後にMyWindow2が閉じる…
以下繰返しMyWindow[N]まで続く… ※下記ソースにはMyWindow1しか書いていません
実際には,MyWindowが開いている裏でシリアル通信をしたり...メインウインドウのGUIを更新したり,,,したい
###どうなるか
MyWindowが開かない
Task.Runの外(前)でshowすればもちろん開く
C#
1private Button_Start_Click(object sender, RoutedEventArgs e){ 2 var sw = new StopWatch(); //時間計測 3 sw.start(); 4 bool flag = true; 5 6 Task.Run(()=>{ 7 while(true){ 8 var mw = new MyWindow(); 9 Dispatcher.BeginInvoke((Action)(() =>{ 10 mw.show(); //mwが表示されない 11 })); 12 if(sw.ElapsedMilliseconds > 1000 && flag){ //1000ms後に閉じてほしい 13 Dispatcher.BeginInvoke((Action)(() =>{ 14 mw.close(); //そもそも表示してないので意味がない 15 })); 16 flag = false; 17 } 18 } 19 }); 20} 21
ご質問は技術的には「UIスレッドとは別のスレッドからN個のウィンドウを時系列に沿ってShow()〜Close()したい」とのことで、それはそれで回答の価値はあると思いますが、そもそもアプリケーションとして、N個の別のウィンドウをシーケンシャルにShow()〜Close()する必要があるのでしょうか。例えば1個の状態表示用のウィンドウを生き続けさせて、表示したり、隠したり、情報更新するのではダメなのでしょうか。(そうだとしても別スレッドからウィンドウを操作するための注意点は残りますが)
質問として投稿する都合上N個という風に表現いたしましたが,実際にはいろいろな内容のウインドウを使用するため,一つのウインドウを生き残らせることは難しい案件でした
共通部分が多いウインドウについては表示したり隠したりを使用しております
回答3件
あなたの回答
tips
プレビュー