2015-08-28 35 views
0

我有一個也包含集合的對象集合,並且我想將它們保存到文件中並稍後閱讀。這是Windows 10通用應用程序.net 4.5和VB將對象集合保存到磁盤Windows 10通用應用程序

我這樣做,但它給出了錯誤「不應該在UI線程上執行同步操作,請考慮將此方法包裝在Task.Run中。」}

Public Sub SaveSpRules(FileName As String) 
    Dim fs As New FileStream(FileName, FileMode.OpenOrCreate) 
    Dim serializer As New XmlSerializer(GetType(Rule)) 
    Dim writer As New StreamWriter(fs) 

     serializer.Serialize(writer, r) 
    End Sub 

規則是類和集合稱爲SpecialRulesCollection,這個代碼編譯,但不起作用

任何幫助感激地接受。請注意這一點對於Windows 10通用應用程序,我不能讓BinaryWriter編譯,因爲這不包括在通用應用程序。

+0

我不熟悉用VB,但您的錯誤聽起來很直正向要麼使你的函數async通過添加async關鍵字(你可以在vb中做到這一點嗎?),或將代碼放在Task.Run((=){... code here ...})中。不知道關於vb的語法,但希望這可以幫助至少指向正確的方向。 – Oyiwai

回答

0

感謝Oyiwai我找到了答案

公共異步子SaveSpRules(文件名作爲字符串,T作爲對象)

Dim myfile As StorageFile 

myfile = Await ApplicationData.Current.LocalFolder.CreateFileAsync("test.dat", CreationCollisionOption.ReplaceExisting) 

Dim KnownTypeList As New List(Of Type) 

KnownTypeList.Add(GetType(Rules)) 

KnownTypeList.Add(GetType(Rule)) 

Dim r As Streams.IRandomAccessStream 

r = Await myfile.OpenAsync(FileAccessMode.ReadWrite) 

Using outStream As Streams.IOutputStream = r.GetOutputStreamAt(0) 

Dim serializer As New DataContractSerializer(GetType(Rules), KnownTypeList) 

serializer.WriteObject(outStream.AsStreamForWrite(), t) 

Await outStream.FlushAsync() 

outStream.Dispose() 

r.Dispose() 

End Using 

End Sub 

Public Async Sub ReadFile() 

Dim t As New Collection(Of Rule) 

Dim myfile As Stream 

Dim r As New Rules 

Dim KnownTypeList As New List(Of Type) 

KnownTypeList.Add(GetType(Rules)) 

Dim serializer As New DataContractSerializer(GetType(Rules), KnownTypeList) 

myfile = Await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("test.dat") 

r = serializer.ReadObject(myfile) 

End Sub