我遇到了这个问题,经过无奈的挫败才将其隔离到了这个问题上。当我从另一个文件夹中的exe上拖动文件时,与命令行参数无关的位图声明将引发异常“ System.ArgumentException:参数无效”。
在以下情况下不会发生这种情况:
这是产生此错误的最低代码:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim logo As New Bitmap("logo.png") 'an image in the same dir as exe
Me.BackgroundImage = logo
Catch ex As Exception
MessageBox.Show("Exception: " & ex.Message)
End Try
End Sub
End Class
如果仅提供文件名,则假定该文件位于当前目录中。当前目录在启动时并不总是相同的,并且在应用程序运行时也可以更改。
我猜该文件与EXE位于同一文件夹中。在这种情况下,当代码工作时,当前目录必须是应用程序文件夹,而在失败的情况下,当前目录必须是其他文件夹。
Process.Start
使用游戏运行时,我们经常会遇到类似的问题。许多游戏照常运行,并假定当前目录是应用程序文件夹。如果您从命令行等运行游戏,那么它将是。如果用于Process.Start
从代码运行游戏,则新过程实际上将继承应用程序的当前目录,并且这种代码将失败。
解决方案是始终明确文件路径。如果要打开应用程序文件夹中的文件,请准确指定以下内容:
Dim logo As New Bitmap(IO.Path.Combine(Application.StartupPath, "logo.png"))
该代码不依赖于当前目录为特定文件夹,因此,如果不存在,则不会受到影响。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句