Как предотвратить тайм-аут обновления потока управления? - PullRequest
3 голосов
/ 05 июля 2011

Кажется, проблема в том, что операция, которая обновляет TextBox, например, со значением свойства, с которым оно связано. Если это свойство занимает слишком много времени для получения указанного значения, поток, который обновляет значение текстового поля, убивает себя? (Я не уверен в этом, просто предполагая). Это вызывает у меня некоторые проблемы со сборкой мусора и неуправляемым кодом.

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

Вот предупреждение, связанное с этой проблемой: Был выполнен обратный вызов для делегата со сборщиком мусора типа «...». Это может вызвать сбои приложения, повреждение и потерю данных. При передаче делегатов в неуправляемый код управляемое приложение должно поддерживать их работу до тех пор, пока не будет гарантировано, что они никогда не будут вызваны.

Может кто-нибудь сказать мне, как я могу предотвратить эту проблему?

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Сохраните ссылку на делегата в вашем классе, чтобы он не собирался мусором.

Читать это для подробностей или читать Собранная задача делегата

0 голосов
/ 05 июля 2011

Вы пытались использовать свойство IsAsync расширения Binding?

 {Binding ZZ, IsAsync=true}

, которое помещает ваш делегат выполнения в ThreadPool и возвращает результат, как только он его получит, также останавливает блокировку потока GUI

...