以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  执行在线升级时,显示图片文件正在使用  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=169430)

--  作者:newsun2k
--  发布时间:2021/6/16 13:57:00
--  执行在线升级时,显示图片文件正在使用
如题,怎么处理?
--  作者:有点蓝
--  发布时间:2021/6/16 14:04:00
--  
升级代码放在什么事件的?

有没有在发布窗口附件添加Splash.jpg文件,如果有,去掉

--  作者:newsun2k
--  发布时间:2021/6/16 14:08:00
--  
弹出升级窗口,然后点按钮升级的。没有在附件中加SPLASH
--  作者:有点蓝
--  发布时间:2021/6/16 14:13:00
--  
升级窗口有没有使用到图片?打开升级窗口前有没有打开其它使用了图片的窗口?
--  作者:newsun2k
--  发布时间:2021/6/16 14:25:00
--  
升级窗口没有使用到图片。跟这个有关,升级前如果保存数据,我会弹出下面这个窗口显示动画,然后关闭。
再点升级,就会说那个动画的图片正在使用。

--  作者:有点蓝
--  发布时间:2021/6/16 14:36:00
--  
这玩意是异步线程,试试下面代码

    Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs)
        If asyncResult.IsCompleted Then
Me.pictureBox1.Image = nothing
Me.pictureBox1.Dispose
Me.pictureBox1 = nothing
            Me.Close()
        End If
    End Sub

如果不行,建议到afteropenproject事件做升级吧

--  作者:newsun2k
--  发布时间:2021/6/16 15:00:00
--  
强烈建议把上面那个功能集成进去
--  作者:newsun2k
--  发布时间:2021/6/16 15:43:00
--  
Dim waitingBox As New FrmWaitingBox(Sub(obj, args)
    \'耗时操作开始
    For i As Integer = 0 To 5
        System.Threading.Thread.Sleep(1000)
        Output.Show(i)
    Next
    \'耗时操作结束
    End Sub,"正在处理数据,请等待...")
waitingBox.ShowDialog()

刚才研究了一下才发现,他整个都改了。
现在调用要用上面的方式。
有点不太好改。
之前用的是以下调用方式:     
打开等待窗口
执行长时间操作      ‘此处代码比较多,而且中间还有提示框,返回值
关闭等待窗口。
求个思路,能改成这样调用不?






--  作者:有点蓝
--  发布时间:2021/6/16 15:52:00
--  
没看懂,什么东西整个都改了?这样调用是哪样?
--  作者:newsun2k
--  发布时间:2021/6/16 15:56:00
--  
之前他是这么来实现的。
我可以调用WaitShow,打开动画窗口,调用WaitClose来关闭动画窗口
这中间,就可以加自己的代码了

Public Sub WaitShow()
Try
    processForm = New System.Windows.Forms.Form
    Dim wfpic As New System.Windows.Forms.PictureBox()
    Dim strImageFile As String

    wfpic.Image = System.Drawing.Image.FromFile(strImageFile)
    wfpic.Dock = System.Windows.Forms.DockStyle.Fill
    wfpic.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom
    processForm.Controls.Add(wfpic)
    processForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
    processForm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
    processForm.TransparencyKey = Color.white
    processForm.backcolor = Color.white
    processForm.OPacity = 1
    processForm.ShowInTaskBar = False
    If Vars("gdSaveFormRate") = 0 Then Vars("gdSaveFormRate") = 4
    wfpic.Width = 1280/Vars("gdSaveFormRate")  \'固定大小
    wfpic.Height = 720/Vars("gdSaveFormRate")
    
    processForm.TopMost = True
    Dim upgradeThread As System.Threading.Thread = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf ShowWaitMess))
    upgradeThread.Start()
Catch ex As Exception
End Try
End Sub

Public Sub WaitClose()
If processForm.InvokeRequired Then
    processForm.Invoke(New Action(AddressOf DoCloseJob))
Else
    DoCloseJob()
End If
End Sub