VB.net保存并加载后台工作者的进度

时间:2013-08-01 09:04:09

标签: vb.net backgroundworker

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

1 个答案:

答案 0 :(得分:1)

我通常这样做;

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

然后运行后台工作程序,并将Job Class传递给后台worker。

在背景工作者上,您可以跟踪该课程的进度。

在您的情况下,您需要支持作业中止,并将结果传递回主程序并使用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

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

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