1

このアプリの新しいバージョンでサーバー チェックポイントを作成しています。アプリがメインフォームを開こうとすると、このエラーが発生します。

フォームの作成中にエラーが発生しました。詳細については、Exception.InnerException を参照してください。エラー: 現在のスレッドがシングルスレッド アパートメントにないため、ActiveX コントロール '6bf52a52-394a-11d3-b153-00c04f79faa6' をインスタンス化できません。

このフォームがスプラッシュスクリーンとして使用されていることを除いて、通常のフォームのようなものなので、これが何であるかはわかりません。スプラッシュ画面を削除すると、フォームはすべてのプラグインとモジュールで正常に開きます。これが私が使用したコードの一部です

Public Class example_form
    Public Function servercheck() As Boolean
        Dim objUrl As New System.Uri("http://google.com")
        Dim objWebReq As System.Net.WebRequest
        objWebReq = System.Net.WebRequest.Create(objUrl)
        Dim objresp As System.Net.WebResponse

        Try
            objresp = objWebReq.GetResponse
            objresp.Close()
            objresp = Nothing
            Return True

        Catch ex As Exception
            objresp = Nothing
            objWebReq = Nothing
            Return False
        End Try
    End Function


    Private Sub Form4_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        BackgroundWorker1.RunWorkerAsync()
        Control.CheckForIllegalCrossThreadCalls = False

    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        If servercheck() = True Then
            Form1.Show()
            Me.Hide()
            BackgroundWorker1.CancelAsync()
        Else : PictureBox1.Image = My.Resources._12383u9
            MsgBox("some text here", MsgBoxStyle.Critical)
            End
        End If
    End Sub
End Class

これでコードができました。フォームを開こうとすると、バックグラウンド ワーカーでエラーが発生します。(コードの最後に)

4

1 に答える 1

0

OK、エラーが何であるかを見つけました。このエラーが発生した場合は、work モードの backgroundworker に form.show() コマンドを追加しないでください。バックグラウンドワーカーが終了するときにフォームをロードする必要があります。したがって、正しいコードは次のようになります

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
              If servercheck() = True Then
            Me.Hide()
            BackgroundWorker1.CancelAsync()
        Else : PictureBox1.Image = My.Resources._12383u9
            MsgBox("Some text here", MsgBoxStyle.Critical)
            End
        End If
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        Form1.Show()
    End Sub 
于 2012-11-07T17:29:52.570 に答える