我有一个C#WPF应用程序,其中我有一个后台工作线程,它定期将当前工作的应用程序数据序列化为文件(使用json.net)。正在序列化的一个数据是FlowDocument。使用以下Json.Net JsonConverter:
从主线程序列化它可以正常工作public class FlowDocumentSerializerJsonConverter : JsonConverter
{
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, JsonSerializer serializer)
{
XmlDocument xdoc = new XmlDocument();
writer.WriteValue(XamlWriter.Save((FlowDocument)value));
}
public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
...
}
public override bool CanConvert(Type objectType)
{
return typeof(FlowDocumentSerializer).IsAssignableFrom(objectType);
}
}
但是,在我的backgroundworker线程中,在第<:p>行
writer.WriteValue(XamlWriter.Save((FlowDocument)value));
我得到一个System.InvalidOperationException
,说:“调用线程无法访问此对象,因为另一个线程拥有它。”
有关如何解决此问题但仍保留自动保存功能的任何想法?我宁愿将工作保留在另一个线程中,因为我不想在自动保存时影响用户的体验。