0

次のコードで「インデックスが範囲外でした。負ではなく、コレクションのサイズ未満である必要があります」という例外が発生します。ここで実際に起こっていることは、最終的に占有しているいくつかの重複値を処理することです。データグリッド

try
         {
            int index = alerts.Find(alertName);
            if (index >= 0 && tblAlarm.Rows.Count > idx)
            {
               DataRow row = tblAlarm.Rows[idx];
               m_dcDuplicates.ReadOnly = false;

            }
         }

タイプのサイズを大きくする必要がありますintlong?または、追加のチェックインコードが必要ですか?

4

1 に答える 1

1

ステートメントを使用しているためlock、これはおそらくマルチスレッドの実装です。

考えられる原因は、オブジェクトへのアクセスを適切に同期できていないことです。コレクションを更新する他のコードを見てthisください (上記のコード内) - 問題が明らかでない場合は投稿してください。

アップデート

たとえば、更新されたソース コードでは、インデクサーのセッターが同期されていません。

public Alert this[int index]
{
    get ...
    set
    {
        this.List[index] = value;
    }
}

おそらく次のものが必要です。

public Alert this[int index]
{
    get ...
    set
    {
        lock(this)
        {    
            this.List[index] = value;
        }
    }
}

コードのもう 1 つの奇妙な点は、AddおよびRemoveメソッドが を参照this.InnerListし、インデクサーが を参照することthis.Listです。

于 2012-12-11T16:38:33.590 に答える