我一直在阅读有关并发性的文章,并从更“线程安全”的角度来看待问题。WPF (或者实际上是System.Windows.Freezable等)有一个freezable类,它可以提供“冰棒不变性”。有没有人尝试过在WPF/Silverlight之外使用这个,或者使用你自己的,或者使用别人的,是不是更好?我知道有几个很好的。
发布于 2009-12-24 03:02:04
不应在WPF外部使用System.Windows中的Freezable类型。
这样做的原因是您创建了对WindowBase.dll的依赖(或者定义了Freezable )。在没有直接访问UI的情况下,这种引用不应该存在于“模型项目”中。
但是,您可以很容易地编写自己的Freezable基类。
我在一个应用程序中使用了以下接口,在该应用程序中,我希望创建需要复杂初始化的线程安全对象(它是循环引用):
public interface IFreezable
{
bool CanFreeze
{
get;
}
bool IsFrozen
{
get;
}
void Freeze();
}注意CanFreeze属性:我决定使用它,因为我想在冻结之前验证Freezables --在我看来,不给客户端这样做的机会是不好的。
Freezables的概念是一个很好的想法,它丰富了多线程应用程序中的工具调色板。
发布于 2011-09-16 02:05:09
在您觉得需要的任何地方,都可以随意使用Freezable和其他dispatcher/dependency对象。引用WindowsBase.dll与将GDI32.DLL加载到无头服务器程序中没有什么不同(它们都这样做,而且必须这样做)。您需要考虑的唯一一件事是,DispatcherObject是以Windows消息循环为导向的,它提供的基础结构对您几乎没有好处,除非您的代码是事件驱动的,并且您的对象驻留在具有调度程序事件循环的线程上。但如果是这样的话,您可以通过在DispatcherObject派生程序中使用线程亲和性包装本机对象来获得大量的设计清晰度和灵活性(我在ESENT中做到了这一点,效果很好)。这完全取决于你愿意在多大程度上跳出框框。
https://stackoverflow.com/questions/1954665
复制相似问题