每当我关闭或打开我的程序时,有没有办法让我保存和加载我的后台工作人员进度?
问问题
360 次
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 回答