线程可靠性:日志文件显示我经常调用的函数没有随机到达return语句

红熊

编辑:我找到了原因,因为函数语句包装在try / catch子句中,所以函数无法达到无法记录退出代码的状态。

我现在也在catch子句中登录。

如果我发现新东西,我会通知您。

我正在VB.NET中制作一个UI应用程序,该应用程序创建了Processes以运行某些命令行应用程序并获取它们返回的字符串。

所有这些调用都是在BackgroundWorker线程中进行的。

问题是我的应用程序不可靠。

有时它可以正常工作,有时函数无法到达return语句。

之所以会这样,是因为我在函数返回之前将信息记录在文本文件中。

我有什么不做的吗?这是我第一次使用backgroundworker。

如果您需要更多信息,我们将很乐意为您提供。

编辑:我在UI中不使用的ExecuteCommand函数返回的信息,我用它创建一个Excel文件。编辑:我调用的函数

Public Function ExecuteCommand(ByVal Command As String) As String
    Dim bw As BackgroundWorker = MainForm.BackgroundWorker1
    RuntimeHelpers.PrepareConstrainedRegions()
    Try
        Dim result As String = String.Empty
        Dim startTime As Date
        Dim endTime As Date
        Dim procStartInfo As New System.Diagnostics.ProcessStartInfo("cmd", "/c " & Command)


        objLog.LogAction("[" & Format(Now, "HH:mm:ss") & "]" & " " & Command.ToString)
        startTime = Now
        ' The following commands are needed to redirect the standard output.
        ' This means that it will be redirected to the Process.StandardOutput StreamReader.
        procStartInfo.RedirectStandardOutput = True
        procStartInfo.RedirectStandardError = True
        procStartInfo.UseShellExecute = False
        ' Do not create the black window.
        procStartInfo.CreateNoWindow = True
        ' Now we create a process, assign its ProcessStartInfo and start it
        Dim proc As New System.Diagnostics.Process()

        AddHandler proc.OutputDataReceived, AddressOf StdOutputDataHandler
        sStdOutput = New StringBuilder()

        proc.StartInfo = procStartInfo
        proc.Start()

        proc.BeginOutputReadLine()





        Dim exitCode As Integer
        proc.WaitForExit()
        exitCode = proc.ExitCode




        Dim rsStdOut As String = String.Empty
        If sStdOutput.Length > 0 Then
            rsStdOut = sStdOutput.ToString
        End If


        proc.Close()
        proc = Nothing
        endTime = Now
        Dim elapsed As String
        elapsed = (endTime - startTime).TotalSeconds.ToString
        elapsed = elapsed.Substring(0, elapsed.IndexOf(".") + 4)
        objLog.LogAction("[" & Format(Now, "HH:mm:ss") & "]" & " exit code: " & exitCode.ToString() + vbCrLf + vbTab + "Command execution took " + elapsed + " seconds" + vbCrLf)


        If exitCode <> 0 Then
            result = ERROR_MESSAGE
        Else
            result = rsStdOut
        End If


        result = result.Trim()
        If result.Length > 1 Then
            'result = result.Substring(0, result.Length - 1)
        End If

        'result = Regex.Replace(result, "\n", RESULT_SPLITER)

        Return result
    Catch ex As Exception
        Return ERROR_MESSAGE
    End Try


End Function

和日志文件摘录:

[13:44:05] si viewproject -P project -Y --projectRevision 1.4
[13:44:05] si viewproject -P project -Y --projectRevision 1.5
[13:44:05] si viewproject -P project -Y --projectRevision 1.6
[13:44:06] exit code: 0
Command execution took 0.079 seconds

[13:44:06] si viewproject -P project -Y --projectRevision 1.7
[13:44:06] exit code: 0
Command execution took 0.082 seconds

在代表命令的每一行之后,应该有一个退出代码

红熊

我在代码中找到了该错误。该行:

elapsed = elapsed.Substring(0, elapsed.IndexOf(".") + 4)

抛出异常

System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.

因为命令的运行时间各不相同,并且有时“。”后没有4位数字。

我的问题与BackgroundWorker无关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

线程可靠性:日志文件显示我经常调用的函数没有随机到达return语句

来自分类Dev

在没有return语句的情况下到达函数结尾

来自分类Dev

App Engine管道-我是否应该使用return_task = True以获得更高的可靠性?

来自分类Dev

ZeroMQ的可靠性?

来自分类Dev

UDP的可靠性

来自分类Dev

计算多行插入语句的插入ID的可靠性

来自分类Dev

可靠性监控器的命令行调用

来自分类Dev

AltBeacon-可靠性问题:即使信标在android设备旁边,也经常调用“ didExitRegion”

来自分类Dev

如何测试我的静脉模拟的可靠性?

来自分类Dev

如何检查压缩文件的可靠性?

来自分类Dev

音频延迟与可靠性

来自分类Dev

苹果通知可靠性

来自分类Dev

BSOD的可靠性如何?

来自分类Dev

VM快照可靠性?

来自分类Dev

inotifywait循环的可靠性

来自分类Dev

如果我对OleDbParameterCollection.Clear的可靠性有所关注,我可以使用哪些方法来验证该方法的有效性?

来自分类Dev

设计措施(不采取备份措施)以确保文件系统的可靠性和完整性?

来自分类Dev

Yesod:-dump-splices可靠性

来自分类Dev

Elasticsearch单节点可靠性

来自分类Dev

无例外和可靠性保证

来自分类Dev

Apple Push Notification可靠性

来自分类Dev

Mono SerialPort类的可靠性如何?

来自分类Dev

gcloud docker push可靠性

来自分类Dev

类型推断的可靠性如何?

来自分类Dev

NTFS与ext4的可靠性

来自分类Dev

亚马逊夏令时可靠性

来自分类Dev

FirebaseInstanceId.getInstance().getToken() 可靠性

来自分类Dev

浮点值,运算符和函数的可靠性如何?

来自分类Dev

为什么我的循环没有到达文件末尾?