2

C# のディクショナリにいくつかの要素を追加しようとしていますが、いくつかの問題が発生しています。私はC#開発に慣れていないので、誰かが私を助けてくれることを願っています.

要素を追加するためのコードは次のとおりです。

if (!connections.ContainsKey(port.getParentName()))
{
    connections.Add(port.getParentName(), port.getLabel() + ";" + cable + ";" + cableTemplate + "|");
}
else
{
    connections[port.getParentName()] += port.getLabel() + ";" + cable + ";" + cableTemplate + "|";
}

キーがポート辞書に既に含まれているかどうかを確認していますが、取得しています:

“An item with the same key has already been added”

また、データを非同期で取得していることにも言及する必要があるため、これは同期の問題であると推測されます。このコードブロックをロックしてこれを処理しようとしましたが、これでは問題が解決しないようです:

System.Object lockThis = new System.Object();
lock (lockThis)
{
    ....
}

また、このエラーが常に発生しているわけではないことにも言及する必要があります。アプリケーションを起動するときだけです。何がこれを引き起こしているのでしょうか?同期を間違っている方法ですか、それとも何か他のことですか?

4

3 に答える 3

2

ConcurrentDictionaryは、同期の問題を処理できます。

于 2013-04-04T12:15:36.333 に答える
2

クラスのスコープ内で同期オブジェクトを移動します。

public class Test
{    
    private object syncRoot = new object();

    private void Foo()
    {
        lock (this.syncRoot)
        {
            ....
        }
    }
}

クラスの使用方法に応じて、静的にするかどうかを決定します。

于 2013-04-04T12:14:45.963 に答える