Двоичный форматер возвращает вызывающего и отменяет form.close

1

Я хочу сериализовать массив структур с бинарным форматированием, чтобы отправить его по сети или сохранить в файл в этом случае.
Он подписан на событие Form.Closing моей формы

void writeHistoryToFile(object sender, CancelEventArgs e)
{
    ListView.ListViewItemCollection coll = historyListView.Items;
    int count = coll.Count;
    if(count == 0)
        return;
    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream memStr = new MemoryStream();
    searchResult[] container = new MainForm.searchResult[count];
    for(int i = 0; i < count; i++)
    {
        searchResult tagged = (searchResult)coll[i].Tag;
        container[i] = tagged;
    }
    byte[] bytesToWrite;
    bf.Serialize(memStr, container);   //HERE
    bytesToWrite = memStr.ToArray();   //BREAKPOINT

    List<FileInfo> hisFls = historyFiles;
    if(hisFls.Count != 0)
    {
        foreach(FileInfo element in hisFls)
        {
            element.Delete();
        }
    }

    FileInfo serFile = getTempFile(".avsh");
    using(FileStream writeStream = serFile.OpenWrite())
    {
        writeStream.Write(bytesToWrite, 0, bytesToWrite.Length);
        writeStream.Flush();
    }
}

Что оно делает:
Я закрываю форму, и функция вызывается (точки останова, установленные выше ЗДЕСЬ, запускаются).
Когда вы бежите свободно, форма не закрывается и снова реагирует.
Когда вы переходите через код, отладчик вскоре висит в ЗДЕСЬ, а затем код снова запускается снова.
Точки останова, расположенные за ЗДЕСЬ, никогда не достигаются.

Таким образом, кажется, что двоичный форматировщик возвращает функцию или что-то, но без какого-либо исключения или такого.

UPATE
Похоже, что моя структура не сериализуема, так.
Добавлено [Serializable] и теперь он работает. См. Комментарии относительно того, почему не было исключений и т.д. -_- Errormessage и stacktrace

The Type "ExportGrepper.MainForm+searchResult" in Assembly Arbeitsvorräte duchsuchen, Version=1.0.5351.15603, Culture=neutral, PublicKeyToken=null" is not marked as serializable.

   at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)

   at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)

   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()

   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter)

   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter)

   at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(WriteObjectInfo objectInfo, NameInfo memberNameInfo, WriteObjectInfo memberObjectInfo)

   at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)

   at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)

   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)

   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)

   at ExportGrepper.MainForm.writeHistoryToFile(Object sender, CancelEventArgs e)
  • 1
    Попробуйте добавить Try..Catch в вашу функцию (или просто вокруг вашей сериализации). Какое исключение вы получаете?
  • 1
    stackoverflow.com/questions/4933958/...
Показать ещё 3 комментария
Теги:
debugging
serialization
binaryformatter

1 ответ

1
Лучший ответ

"Ответ", чтобы закрыть этот вопрос: попробуйте добавить Try..Catch к вашему коду и проверить, какая ошибка. Затем сделайте вашу структуру сериализуемой. ;)

  • 0
    Откуда ты знаешь? O :-)
  • 0
    Просто угадай ...;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню