每当我关闭或打开程序时,有没有办法保存并加载我的后台工作进度?
答案 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
您还可以使用两行额外代码对其进行压缩和加密。但我认为你不会需要......
请注意,并非所有类型都支持序列化,例如,集合和排序列表不会序列化。您需要将它们转换为平面阵列。