从另一个线程序列化FlowDocument

时间:2015-08-17 16:53:22

标签: c# multithreading serialization json.net flowdocument

我有一个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,说:“调用线程无法访问此对象,因为另一个线程拥有它。”

有关如何解决此问题但仍保留自动保存功能的任何想法?我宁愿将工作保留在另一个线程中,因为我不想在自动保存时影响用户的体验。

0 个答案:

没有答案