none
BinaryFormatter. Сериализация моего класса, не работат из-за поля Timer. RRS feed

  • Вопрос

  • Я в своём классе использую таймер. Ну чтобы каждый экземпляр будильника проверял себя сам на срабатывание. Теперь не работает BinnaryFormater. Вот ошибка:

    Цитата:Тип "System.Windows.Forms.Timer" в сборке "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" не помечен как сериализуемый. 

    Объясните пожалуйста кто нибудь, что вообще за беда с этими сериализациями? Что можно сериализовать, класс содержащий только данные? Таймер нельзя, чтоли использовать?

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 22:35 MSDN Forums consolidation (От:Visual C#)
    21 марта 2010 г. 6:41

Ответы

  • вместо таймера сохраняйте его состояние, т.е. те те настройки которыми его инициализируют , интревал срабатывания.

    при десериализации - в конструкторе создавайте таймер по сохраненным настройкам,

    при сериализации - воспользуютесь интерфейсом ISerializable или атрибутами [OnSerializing]... для контроля сериализации и записывайте его настройки

    • Предложено в качестве ответа PashaPash 22 марта 2010 г. 18:05
    • Помечено в качестве ответа I.Vorontsov 23 марта 2010 г. 9:20
    22 марта 2010 г. 7:17

Все ответы

  • сериализовать можно только данные.

    в вашем случае выдолжны сериализовать "состояние" объета, для того чтобы потом его восстановить.

    21 марта 2010 г. 6:55
  • Дело в том, что я до этого этот класс сериализовывал. Потом в его поля добавил полеTimer и обаботчик Tick ну выполняю в обаботчике определённые действия, но теперь не  сохранить класс в файл, а без этого мне никак, мне нужно полюбом как-то сохранить клас в файл. Что делать? убирать из класса таймер и пытаться сделать обработчик за пределами класса? Много конечно придётся перписывать или есть другой способ?
    21 марта 2010 г. 7:03
  • вместо таймера сохраняйте его состояние, т.е. те те настройки которыми его инициализируют , интревал срабатывания.

    при десериализации - в конструкторе создавайте таймер по сохраненным настройкам,

    при сериализации - воспользуютесь интерфейсом ISerializable или атрибутами [OnSerializing]... для контроля сериализации и записывайте его настройки

    • Предложено в качестве ответа PashaPash 22 марта 2010 г. 18:05
    • Помечено в качестве ответа I.Vorontsov 23 марта 2010 г. 9:20
    22 марта 2010 г. 7:17