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

わんくま同盟

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

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


(過去ログ 175 を表示中)
■100410 / )  Re[3]: 非同期処理を同期処理にする方法
□投稿者/ くま (221回)-(2022/07/28(Thu) 11:12:35)
一部抜粋だけどこんな感じ
   ※FmWebView2 はWebView2コントロール1つ張り付いているフォーム
   Friend Shadows _Fm As FmWebView2
   ※FmWebView2の各イベントで(Load、FormClosed)でシグナル設定
   Friend ReadOnly _opened As New System.Threading.CountdownEvent(1)    '状態
    ''' <summary>
    ''' WebView2を開きます。
    ''' </summary>
    Public Sub OpenWebView2() Implements IWebView2.OpenWebView2

        Dim result As Task(Of Integer) = OpenWebView2Async()

        '----- 非同期実行の完了まで待機
        Do Until result.Status = TaskStatus.RanToCompletion
            Application.DoEvents()
            System.Threading.Thread.Sleep(10)
        Loop

    End Sub
    ''' <summary>
    ''' WebView2を開きます。(非同期)
    ''' </summary>
    Private Async Function OpenWebView2Async() As Task(Of Integer)
        Try
            If Me._Fm IsNot Nothing Then
                Me._Fm.Close()
                Do Until Me._Fm Is Nothing
                    Application.DoEvents()
                    System.Threading.Thread.Sleep(10)
                Loop
            End If

            '----- シグナル初期化
            System.Threading.Thread.Sleep(1)
            Me._opened.Reset()

            Me._Fm = New FmWebView2
            Me._Fm.Show(Me)

            '----- フォーム設定完了まで待機
            Dim _openedTime As Integer = Await Task.Run(
                Function() As Integer
                    Dim millsec As Integer = 0
                    Do Until Me._opened.Wait(10)
                        millsec += 10
                        If millsec > 30000 Then '30秒 
                            millsec = -1
                            Exit Do
                        End If
                    Loop
                    Return millsec
                End Function
            )

            '----- シグナル初期化
            System.Threading.Thread.Sleep(1)
            Me._opened.Reset()

            Return _openedTime

        Catch ex As Exception
            'StartUp.ExceptionHandling(ex)
            Return -1
        End Try

    End Function

全部は載せられないのとあってるかな?
あとページ移動とかJS実行とかで同じような事しています。
とりあえず今のところ半年以上毎日使っているけど問題はないね。

解決済み
返信 編集キー/


管理者用

- Child Tree -