Вы не должны использовать тип Freezable в System.Windows вне WPF.
Причиной этого является то, что вы создаете зависимость от WindowBase.dll (или там, где определяется Freezable). И такая ссылка не должна существовать в «модельных проектах» без прямого доступа к пользовательскому интерфейсу.
Однако вы можете легко написать свой собственный базовый класс Freezable.
Я использовал следующий интерфейс в приложении, где я хотел создать потокобезопасные объекты, которые требовали сложной инициализации (это были циклические ссылки):
public interface IFreezable
{
bool CanFreeze
{
get;
}
bool IsFrozen
{
get;
}
void Freeze();
}
Обратите внимание на свойство CanFreeze: я решил использовать его так, как я хотел проверить Freezables перед замораживанием - и, по моему мнению, отсутствие у клиента возможности сделать это нехорошо.
Концепция Freezables - это хорошая идея IMO, которая обогащает палитру инструментов в многопоточных приложениях.