一部抜粋だけどこんな感じ
※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実行とかで同じような事しています。
とりあえず今のところ半年以上毎日使っているけど問題はないね。
|