Kay*_*oze 6 c# wpf multithreading
以下代码块预先在C#中加载对象.
public bool IsModelLoaded { get; set; }
public override MyObject Load()
{
if (!IsModelLoaded)
{
Model = MyService.LoadMyObject(Model);
IsModelLoaded = true;
}
return Model;
}
Run Code Online (Sandbox Code Playgroud)
我的意图是只运行一次这个块,因此只加载模型一次.不过,这个代码块从2个不同的线程运行两次..
如何确保此块仅运行一次?(在多线程上).
谢谢.
最简单的是添加
[MethodImpl(MethodImplOptions.Synchronized)]
public override MyObject Load()
{
//snip
}
Run Code Online (Sandbox Code Playgroud)
但请注意,这会锁定整个对象,而不仅仅是方法。这并不是很好的练习。
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx
同步
指定该方法一次只能由一个线程执行。静态方法锁定类型,而实例方法锁定实例。只有一个线程可以在任何实例函数中执行,并且只有一个线程可以在任何类的静态函数中执行。
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |