Vb.net 抓住 "Assertion Failed"?

Vb.net Catch an "Assertion Failed"?

所以我正在处理的程序有一个 "Process File" 按钮,它会打开一个 select 文件对话框,你 select 一个文本文件。然后,该软件调用一个函数,将其通过管道传输到 C 语言的 DLL 库中,并得到 returns 结果。

一切正常,除非您尝试处理的文件被移动或删除。 VB 抛出一个很大的 "Assertion Failed" 消息框说 str =! NULL(我猜是真的)。我在 "try, Catch" 语句中有函数。

Assertion

为什么它不直接抓住它?

我知道我可以在处理文件之前验证文件是否存在,但删除文件是一个测试,以查看 try、catch 是否有效,但由于断言框很大,所以没有成功。

============================================= =============================

        Try
            ProcessSongResult = ProcessSongInC(old_key(0),
                              new_key(0),
                              output_mode(0),
                              lyrics_mode(0),
                              display_format(0),
                              blank_line_mode(0),
                              song_file_path(0),
                              screen_width,
                              screen_height,
                              paper_width,
                              paper_height,
                              error_msg(0),
                              transposed_song(0),
                              num_columns,
                              column_1_end,
                              column_2_end,
                              font_size,
                              total_lines,
                              tsi(0),
                              ischord(0))

        Catch ex As Exception
            MsgBox("Tranposing error encountered. Choose different settings and try again.", MsgBoxStyle.Critical, "Transposing Error Encountered!")
            Exit Sub

        End Try

Public Declare Function ProcessSongInC Lib "LMSdll.dll" (
    ByRef old_key As Byte,
    ByRef new_key As Byte,
    ByRef output_mode As Byte,
    ByRef lyrics_mode As Byte,
    ByRef display_format As Byte,
    ByRef blank_lines_mode As Byte,
    ByRef song_file_path As Byte,
    ByVal screen_width As Integer,
    ByVal screen_height As Integer,
    ByVal paper_width As Integer,
    ByVal paper_height As Integer,
    ByRef err_msg As Byte,
    ByRef TransposedSong As Byte,
    ByRef num_columns As Integer,
    ByRef column_1_end As Integer,
    ByRef column_2_end As Integer,
    ByRef font_size As Integer,
    ByRef total_lines As Integer,
    ByRef tsi As Integer,
    ByRef ischord As Byte
    ) As Integer

您是否阅读了 Debug.Assert 方法的文档?它在做什么是重点。它应该在调试期间提供有关特定条件的特定信息。关键在于,在执行会受断言测试条件影响的操作之前,先放置断言。在调试时,您会从断言中获取消息,而在发布版本中,您只会从随后的代码中抛出异常。你看到的就是你应该看到的。如果您想避免断言,那么 运行 发布版本。