Elo*_*off 5 c# multithreading attributes
现在我做:
Util.AssertBackgroundThread();
要么
Util.AssertUIThread();
在方法的开头.这不是太糟糕,但它是运行时错误检查.我们使用像C#这样的静态语言的原因是为了将更多的错误检查移到编译器的肩膀上.
现在我认为这通常不容易,但是如果我将自己限制为仅从我自己的实用程序方法启动线程(或使用ThreadPool.QueueUserWorkItem),那么在我看来,如果我标记这些方法,它应该是可能的进行静态分析以验证仅在UI线程上运行的方法确实只在UI线程上运行?
所以这里有两个问题.
我一直很喜欢这种模式:
public void GuiMethod(object param)
{
if(this.InvokeRequired)
{
this.Invoke(delgateToGuiMethod, params,...)
}
else
{
//perform gui thread method
}
}
Run Code Online (Sandbox Code Playgroud)
您受到惩罚以调用和检查,但您可以保证该方法在gui线程上运行,或者将使用此模式调用gui线程.
| 归档时间: |
|
| 查看次数: |
1064 次 |
| 最近记录: |