Clé*_*ent 0 vb.net multithreading
我检查更新的例程是作为一个单独的进程运行的.退出应用程序需要更新,因此当找到更新时,对话框会询问用户是否要立即退出.如果他们这样做,代码(来自更新线程)调用Application.Exit().
但是,如果FormClosed需要关闭的任何表单的事件需要访问其控件,则会检测到无效的跨线程操作(这听起来很合乎逻辑).
你会如何解决这个问题?
谢谢,
CFP.
问题是由检查更新的代码引起的,它运行在错误的线程上.从主UI线程以外的任何线程调用Application.Exit()都是致命的.即使是消息框也很麻烦,虽然你已经侥幸成功,但是这个盒子很容易就会消失在另一个窗口后面.
也许它很容易解决.如果使用FileSystemWatcher,则使用其SynchronizingObject属性.如果您使用Timer,则使用System.Windows.Forms.Timer.Anyhoo,通用解决方案是使用Control.BeginInvoke()来生成显示消息框的代码,并在主线程上调用Exit run.