现在我的做法是:
Util.AssertBackgroundThread();
或者
Util.AssertUIThread();
在方法开头。虽然这不算太糟糕,但这是运行时错误检查。我们使用C#等静态语言的原因是将更多的错误检查移至编译器。
现在我认为这通常不容易实现,但如果我只限制自己从自己的实用方法启动线程(或使用ThreadPool.QueueUserWorkItem),那么我认为如果标记了这些方法,则应该可以进行静态分析以验证仅应在UI线程上运行的方法确实只在UI线程上运行?
所以这里有两个问题。
- 我是否正确,这可以在编译时进行检查?
- 在Visual Studio 2008中(安装了最新的ReSharper)是否有任何实际方法来实现这一点?
Assert
方法打上[Conditional("DEBUG")]
标记。这就是为什么它存在的原因 ;) - Sam Harwell