static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new SpaceInvaders());// i get an error here when i start the form application.. it says Argument Exception. Parameter is not valid
}
我的主要表格看起来像这样:
public SpaceInvaders()
{
InitializeComponent();
}
public void SpaceInvaders_Load(object sender, EventArgs e)
{
}
这里是堆栈跟踪
“在System.Drawing.Graphics.GetHdc()\ r \ n的System.Drawing.BufferedGraphics.RenderInternal(HandleRef refTargetDC,BufferedGraphics buffer)\ r \ n在System.Drawing.BufferedGraphics.Render()\ r \在系统.Windows.Forms.Control.WmPain(Message& m)\ r \ n的System.Windows.Forms.Control.WndProc(Message& m)\ r \ n在System.Windows.Forms.ScrollableControl.WndProc上System.Windows上System.Windows.Forms.Form.WndProc(Message& m)\ r \ n的System.Windows.Forms.ContainerControl.WndProc(Message& m)\ r \ n的消息& m)\ r \ n系统.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr在System.Windows.Forms.Application.Component.System.Windows.Forms上的System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)\ r \ n中的hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)\ r \ n .UnsafeNativeMethods.IMsoComponentM在System.Windows.Forms.Application.ThreadContext的System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason,ApplicationContext context)\ r \ n中的anager.FPushMessageLoop(Int32 dwComponentID,Int32 reason,Int32 pvLoopData)\ r \ n .RunMessageLoop(Int32 reason,ApplicationContext context)\ r \ n在System.Windows.Forms.Application.Run(Form mainForm)\ r \ n,位于D:\ Documents and Settings \ Dima \ My中的WindowsFormsApplication1.Program.Main() Documents \ Visual Studio 2008 \ Projects \ SpaceInvaders \ SpaceInvaders \ Program.cs:第18行\ r \ n在System.AppDomain._nExecuteAssembly(程序集,String [] args)\ r \ n在System.AppDomain.ExecuteAssembly(String assemblyFile) ,证据assemblySecurity,String [] args)\ r \ n在System.Threading上的System.Threading.ThreadHelper.ThreadStart_Context(对象状态)\ r \ n的Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()\ r \ n中。 ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)\ r \ na t System.Threading.ThreadHelper.ThreadStart()“
“参数无效。”
我想我发现了问题:
public void Draw(Graphics g,int animationCell)
{
// some code
g.dispose()//that method threw the exception can someone tell me why? i thought you do need to dispose your graphics object at the end when you finish using it.
}
答案 0 :(得分:2)
我认为您应该使用Step Into(F11)进行调试,以便您可以进入SpaceInvaders表单并查看是否有任何null或其他无效参数提供给方法。
此行可能不会立即抛出异常:
Application.Run(new SpaceInvaders());
但是一些初始化函数可能会产生问题。
看到堆栈跟踪和代码后进行编辑:
请参阅//some code
部分。检查g.dispose()
之前的代码是否不会触发在Draw方法之后执行的任何事件处理程序。如果是这样,那么该事件处理程序应该是需要图形对象的处理程序,但是你已经将它处理掉了。因此,图形参数为空。如果您需要任何进一步的帮助,请填写//some code
部分。
答案 1 :(得分:1)
简短回答:
只是不要在Draw() - methode中的Graphics-object上调用Dispose()。 Graphics-object包含本机绘图表面的句柄。如果您丢弃它,您的表格将无法在屏幕上绘制。
答案 2 :(得分:1)
你不应该丢弃别人的Graphics
对象。
只处理您拥有的对象,并且只有当您确定没有其他人将使用它时。
如果你从别人那里得到一次性物品,你应该假设(除非他们另有说明)他们会在你完成后处理它。你不应该自己处理它,你不应该保存它以后(因为他们可能已经处理它)