我的收藏线程安全吗?

时间:2016-12-02 11:27:00

标签: c#

AddSafe方法是否真的是线程安全的,或者我正在做的是错误的?

public static MyCollection myCol = new MyCollection();

class MyCollection: ObservableCollection<string>
{
    public void AddSafe(string item)
    {
        lock(this)
        {
            this.Add(item);
        }
    }
}

1 个答案:

答案 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");
        });
    }