C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Task使用しUIスレッドに戻す方法について

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■90824 / inTopicNo.1)  Task使用しUIスレッドに戻す方法について
  
□投稿者/ TanuTanu (32回)-(2019/04/25(Thu) 11:33:56)

分類:[VB.NET/VB2005 以降] 

いつもお世話になっております。

下記のような事は可能でしょうか?
ご教授の程、宜しくお願いいたします。

SynchronizationContextを使えば良いのでしょうか?

Private Sub IE.NewWindow2(ByRef ppDisp As Object, ByRef Cancel As Boolean) Handles IE.NewWindow2

Task.Run(Sub()

Window_Check()

End Sub)

End Sub

Private Sub Window_Check()

UI スレッドに戻したい。

End Sub

引用返信 編集キー/
■90825 / inTopicNo.2)  Re[1]: Task使用しUIスレッドに戻す方法について
□投稿者/ とっちゃん (588回)-(2019/04/25(Thu) 11:45:29)
No90824 (TanuTanu さん) に返信
>
> 下記のような事は可能でしょうか?

UIスレッドに「何を」戻したいのでしょうか?

Forms なら、Control.BeginInvoke や Invoke を使ってUIスレッド上で処理を行うということができます。

また、UIスレッドの操作を伴わないフィールド(やプロパティ)を用意しておいて
そこにセットしておき、UIスレッド側ではタイマーや、マウス操作など自身の操作を
トリガーにしてその値を読み取るという方法もあります。

何を行うかで、どういう形をとるのがいいかが大きく変わります。

ちなみに、添付ソースの場合は、コードがシンプルすぎるというのもありますが、
Window_Check() メソッド内を丸ごとUIスレッドで処理したいとなると、Taskを経由する意味がありません。

この形であれば、タイマー(System.Windows.Forms.Timer) を使って、タイミングをずらしてやるだけで充分です。

引用返信 編集キー/
■90826 / inTopicNo.3)  Re[2]: Task使用しUIスレッドに戻す方法について
□投稿者/ せば (14回)-(2019/04/25(Thu) 11:59:45)
No90434
の続きでしょうか?
引用返信 編集キー/
■90827 / inTopicNo.4)  Re[3]: Task使用しUIスレッドに戻す方法について
□投稿者/ TanuTanu (33回)-(2019/04/25(Thu) 13:42:20)
とっちゃん 様

ありがとうございます。
タイマー実装したのですがタイマーが動作しないのですが・・・;;

Private Sub IE.NewWindow2(ByRef ppDisp As Object, ByRef Cancel As Boolean) Handles IE.NewWindow2

    Debug.WriteLine("TimerStart") ・・・これはOK

Timer1.Interval = 3000
Timer1.Start()

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

Label1.Text = Now.ToString("hh:mm:ss")
Window_Check()

End Sub

*******************************

せば 様
No90434
>の続きでしょうか?

No90434はIE→webページダイアログでイベントの順番を変えたいという内容です。
今回は、IE→IEで極力UIスレッドのまま動かしたいという内容です。

宜しくお願いいたします。







引用返信 編集キー/
■90828 / inTopicNo.5)  Re[4]: Task使用しUIスレッドに戻す方法について
□投稿者/ とっちゃん (589回)-(2019/04/25(Thu) 13:54:07)
No90827 (TanuTanu さん) に返信
> タイマー実装したのですがタイマーが動作しないのですが・・・;;
>
なにかやらないといけないことが抜けているなどがあると思いますが、
コードのごく一部しかないのでどこに問題があるのかはさっぱりわからないですね。

一度、もっと簡単なサンプルプログラムを作ってそこでいろいろ試してみるのがいいと思います。

引用返信 編集キー/
■90829 / inTopicNo.6)  Re[5]: Task使用しUIスレッドに戻す方法について
□投稿者/ TanuTanu (34回)-(2019/04/25(Thu) 16:24:06)
とっちゃん 様

下記で無事UIスレッド上で動作するようになりました。
ありがとうございました。

1.Form.LoadにTimer1.Start()入れました。
2.Private Sub IE.NewWindow2(ByRef ppDisp As Object, ByRef Cancel As Boolean) Handles IE.NewWindow2にフラグ追加しました。
3.Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tickに2.のフラグ判定させてWindow_Check()


解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ