0

每当我关闭或打开我的程序时,有没有办法让我保存和加载我的后台工作人员进度?

4

1 回答 1

1

我通常这样做;

在您的主程序中创建一个包含所有作业参数和结果的“作业类”。

然后运行后台工作程序,并将作业类传递给后台工作程序。

在后台工作人员中,您可以跟踪该课程的进度。

在您的情况下,您需要支持作业中止,并将迄今为止的结果传递回主程序并使用 xml 序列化或其他方法保存它。

然后当您第二次加载程序时,您需要再次将所有内容加载回您的作业类中,并继续运行!

Public Class Job
     public JobProgress as integer
     public JobStillRunning as boolean
end class

把所有与工作有关的东西都放在这里...

然后你把这份工作称为;

BackgroundWorker1.RunWorkerAsync(MyJob)

在您的后台进程中,您可以检索该类:

dim MyJob as Job = trycast(e.Argument, job)

在进度更新和完成你做同样的事情时,你只是继续通过课程......

如何将类保存到 XML:

        Dim Serializer As New System.Xml.Serialization.XmlSerializer(GetType(Job))
        Using OutPutStream As System.IO.FileStream = New FileStream(OutPutFile, FileMode.CreateNew)
                  Serializer.Serialize(OutPutStream, MyJob)
        End Using

以及如何再次加载它;

            Dim Serializer As New System.Xml.Serialization.XmlSerializer(GetType(Job))
            Using InputStream As System.IO.FileStream = New FileStream(AdminSettingsFile, FileMode.Open, FileAccess.Read, FileShare.Read)
                    MyJob = Serializer.Deserialize(InputStream)
            End Using

您还可以使用两行额外代码对其进行压缩和加密。但我不认为你会需要那个...

请注意,并非所有类型都支持序列化,例如,集合和排序列表不会序列化。您需要将它们转换为平面数组。

于 2013-08-01T09:39:59.000 回答