AddSafe方法是否真的是线程安全的,或者我正在做的是错误的?
public static MyCollection myCol = new MyCollection();
class MyCollection: ObservableCollection<string>
{
public void AddSafe(string item)
{
lock(this)
{
this.Add(item);
}
}
}
答案 0 :(得分:0)
如何删除/访问,它不仅仅是关于添加?但阅读物品也应该锁定。
设计方面存在一些问题:您使用的是ObservableCollection
,这主要由GUI使用。
我建议你不使用 其他线程中的ObservableCollection<>
而不是GUI线程。控制谁在倾听&#39;在gui线程之外的其他线程上触发事件时会崩溃。更改ObservableCollection中的项时,应在Dispatcher上调用它。这样你的集合就是线程安全的。 (因为没有使用它交叉线程)
<强>伪强>
public class MyControl: UserControl
{
private void MyMethodCalledFromAnOtherThread()
{
this.Dispatcher.Invoke(new Action(
{
// Change the collection...
myCol.Add("Hi there");
});
}