VB.NET写VisionPro程序时,UserResultAvailable没有新的结果在用户队列中

在用VB.NET读取visionprio的拍照结果时,有时会没有新的值获得,程序一直卡在时钟的ResultGot这里,没有进入myJobManager_UserResultAvailable
程序基本是按照康耐视官网的教学视频来的


Imports System.ComponentModel
Imports Cognex.VisionPro
Imports Cognex.VisionPro.QuickBuild
Public Class Form1
    Public inifilepath As String = "D:\ST02\bin\binexe\Files\CONF.ini"
    Dim JobStart_f As String = ""
    Dim Jobworking As Boolean = False
    Dim JobNo As String = ""
    Dim JobPath As String = ""
    Dim ResultGot As Boolean = False

    'Public Blob_Output_Area As Integer = 0
    Dim Blob_Output_Area As Integer = 0
    Private Delegate Sub mydelegate()
    Public outputinfo As String = ""
    Private WithEvents myJobManager As New CogJobManager
    Private myJob As CogJob
    Private myIndependentJob As CogJobIndependent
    Private savefolder As String
    Private savefile As String
    Private savepath As String = "D:\01_Picture\"
    Private Sub frm_Load(sender As Object, e As EventArgs) Handles Me.Load
        savefolder = Now.Year.ToString + Now.Month.ToString + Now.Day.ToString
        savepath = savepath + savefolder + "\"
        If My.Computer.FileSystem.DirectoryExists(savepath) Then
        Else
            My.Computer.FileSystem.CreateDirectory(savepath)
        End If
        Timer1.Enabled = True
    End Sub
    Private Sub InitializeJobManager(ByVal Jobfilepath As String)

        'Depersist the QuickBuild session
        myJobManager = CType(CogSerializer.LoadObjectFromFile(Jobfilepath), CogJobManager)
        myJob = myJobManager.Job(0)
        myIndependentJob = myJob.OwnedIndependent

        ' flush queues
        myJobManager.UserQueueFlush()
        myJobManager.FailureQueueFlush()
        myJob.ImageQueueFlush()
        myIndependentJob.RealTimeQueueFlush()

    End Sub
    Delegate Sub myJobmanagerDelegate(ByVal sender As Object, ByVal e As CogJobManagerActionEventArgs)
    Private Sub CameraFrm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        'Shut down the CogJobManager to clean up threads properly
        Timer1.Enabled = False
        'If myJob.AcqFifo.FrameGrabber.Then Then
        'Else

        'End If
        'myJob.AcqFifo.FrameGrabber.Disconnect(False)
        myJobManager.Shutdown()
    End Sub

    Private Sub myJobManager_UserResultAvailable(sender As Object, e As CogJobManagerActionEventArgs) Handles myJobManager.UserResultAvailable
        If InvokeRequired Then
            Dim myDel As New myJobmanagerDelegate(AddressOf myJobManager_UserResultAvailable)
            Dim eventargs() As Object = {sender, e}
            Invoke(myDel, eventargs)
            Return
        End If

        Dim topRecord As Cognex.VisionPro.ICogRecord = myJobManager.UserResult
        'Populate status label with application information
        outputinfo =
    topRecord.SubRecords("UserResultTag").Content & ": " _
    & topRecord.SubRecords("JobName").Content & " --> " _
    & topRecord.SubRecords("RunStatus").Content.ToString


        Dim tmpRecord As Cognex.VisionPro.ICogRecord
        'Assume the required record Is present And get it
        tmpRecord = topRecord.SubRecords("BlobArea")
        Blob_Output_Area = tmpRecord.Content
        'tmpRecord = topRecord.SubRecords("Picture")
        ' Assume that the required "image" record is present, and go get it.
        tmpRecord = topRecord.SubRecords.Item("ShowLastRunRecordForUserQueue")
        tmpRecord = tmpRecord.SubRecords.Item("LastRun")
        tmpRecord = tmpRecord.SubRecords.Item("Image Source.OutputImage")
        CogRecordDisplay1.Record = tmpRecord
        CogRecordDisplay1.Fit(True)
        'savefile = JobNo + "_" + Now.Hour.ToString + Now.Minute.ToString + Now.Second.ToString + ".BMP"
        'If GetStrFromINI("CCD", "PictureSave", "", inifilepath) = "1" Then
        'CogRecordDisplay1.Image.ToBitmap.Save(savepath + savefile)
        ' End If
        ResultGot = True

    End Sub
    Private Sub Timer1_Tick_1(sender As Object, e As EventArgs) Handles Timer1.Tick
        Try
            If Jobworking = False Then
                JobStart_f = GetStrFromINI("VisionPro", "JobStart", "", inifilepath)
                If JobStart_f = "1" Then
                    Me.TopMost = False
                    Jobworking = True
                    WriteStrINI("VisionPro", "JobStart", "0", inifilepath)
                    JobNo = GetStrFromINI("VisionPro", "JobNo", "", inifilepath)

                    JobPath = GetStrFromINI("VisionPro_Job" & JobNo, "Path", "", inifilepath)
                    InitializeJobManager(JobPath)
                    myJobManager.Run()
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
            myJobManager.Stop()
            Jobworking = False
        End Try
        Try
            If ResultGot Then
                ResultGot = False
                WriteStrINI("VisionPro", "ResultVal", Blob_Output_Area.ToString, inifilepath)
                WriteStrINI("VisionPro", "Result", "1", inifilepath)
                myJobManager.Stop()
                myJobManager.Shutdown()
                'Me.TopMost = True
                Jobworking = False
            End If
        Catch ex As Exception
            ResultGot = False
            Jobworking = False
            WriteStrINI("VisionPro", "ResultVal", "99", inifilepath)
            WriteStrINI("VisionPro", "Result", "1", inifilepath)
            MsgBox(ex.Message)
        End Try

    End Sub
    Private Sub JobClose()
        CogRecordDisplay1.Dispose()
        'Be sure to shudown the CogJobManager!!
        myJobManager.Shutdown()
        Jobworking = False
    End Sub

End Class