关于从main启动的问题

timezone 2010-07-23 10:46:44
刚开始写程序的时候没注意,选择的是从form1启动,程序写完之后发现有异常,想要捕捉Application.ThreadException这个异常,如是就有了下面的main代码,但我改成从main启动后就程序运行不了。刚一点运行就断在form1里的这一句“ Me.Invoke(New ShowScoreChange1(AddressOf ShowScoreChange))” (这句是启动后在由timer触发去调用的一个函数里的)并且提示 “无法访问已经释放的对象。。。”,
请教各位高手,怎么改才能改成从main启动没有错误?
或者是不从main启动可以设置成捕获Application.ThreadException这个异常?
《注:程序不改成从main启动,一切正常》

<STAThread()> Public Sub Main()
Try
Dim currentDomain As AppDomain = AppDomain.CurrentDomain
AddHandler currentDomain.UnhandledException, AddressOf MyHandler
'處理未捕捉的例外
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
'處理UI執行緒錯誤
AddHandler Application.ThreadException, AddressOf Application_ThreadException
'處理非UI執行緒錯誤
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException

If (cmdStartMask_Click() = False) Then
End
Else
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
' Application.Run(New Form1()) ' --指定启动对象,如Form1
'Form1.Show()
Application.Run(New Form1())
End If
Catch ex As Exception
End
End Try
End Sub
...全文
74 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyzsy2008 2010-07-24
  • 打赏
  • 举报
回复
把你main中的那个大大的try catch块去掉试试。
DevinXie 2010-07-24
  • 打赏
  • 举报
回复
不懂,帮顶
timezone 2010-07-24
  • 打赏
  • 举报
回复
非常感谢楼上的高手,因为程序是从同事手中移交过来的不方便转发出来。我尝试改了一下,发现改成从main启动后,问题太多了。我现在想着能不能换个思路,既然程序能在从form启动运行得很好,而我想改成从main启动的目的无非是想捕捉Application.ThreadException这个异常,那有没有什么办法让从form启动的程序捕捉到这个异常呢?非常感谢!
兔子-顾问 2010-07-24
  • 打赏
  • 举报
回复
有些时序问题。还有Graphics.FromHwnd要判断是否创建好了,可能句柄还没创建好先执行了,就会返回个空的或无效的,Graphics.FromImage绘制后,你需要调用picturebox1.Invalidrate()。
从main启动不会有错的。
timezone 2010-07-24
  • 打赏
  • 举报
回复
现在可以从main启动了,但是一堆的问题啊。我在form1_load里定义的的一个jfengg = Graphics.FromHwnd(PictureBox1.Handle) 等到我在timer中去调用它的时候莫名其妙的为null了。那我又在调用的地方重新让jfengg = Graphics.FromHwnd(PictureBox1.Handle) 。接着我用 Dim addm As Graphics = Graphics.FromImage(showscorepic) 再用 addm.DrawImage(overj, nScoreRect, nScoreRect, GraphicsUnit.Pixel)发现showscorepic这张图上根本就没画上。然而这一切只要我改回从form1启动就一切正常。
跪求高手能详细解释一下,程序从启用应用程序框架由form1启动改到从Main启动这中间到底发生了哪些变化?导致这么多古怪的现象呢?

段传涛 2010-07-24
  • 打赏
  • 举报
回复
先帮顶。
可以增加个ExceptionHandle.dll。 然后逐个抛出。
回4楼,form 和form 父类不同啊。
timezone 2010-07-24
  • 打赏
  • 举报
回复
我上网找了一下,似乎这个ThreadException只能在main用addhandle的形式来添加,而不能在applicationevent.vb中用handles的形式来触发。看来还是只能从解决用main启动才行啊。希望高手指点。。。改成从main启动后还是“无法访问已释放的对象。 对象名:“Form1” 。改成从form启动就一切ok
timezone 2010-07-23
  • 打赏
  • 举报
回复
我上网找了一下,似乎这个ThreadException只能在main用addhandle的形式来添加,而不能在applicationevent.vb中用handles的形式来触发。看来还是只能从解决用main启动才行啊。希望高手指点。。。改成从main启动后还是“无法访问已释放的对象。 对象名:“Form1” 。改成从form启动就一切ok
timezone 2010-07-23
  • 打赏
  • 举报
回复
回复楼上的高手,form1肯定是null才引发的。用MAIN启动的时候能看到form1闪了一下,估计是又退出了。怎么能保证让它不退出呢?我的程序启动的是有两个form同时启动的不知道这有没有关系
wuyq11 2010-07-23
  • 打赏
  • 举报
回复
在试图操作已释放的对象会引发异常
判断是否null

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧