0

私はリストを持っています。すべてのクエリ出力をどこに置きますか。次に、スレッドを使用していくつかの処理を行います。そのため、作業が完了したら、リスト項目の値を更新する必要があります。以下の私のコードを見てください:

公に宣言されたリスト:

public static List<string[]> OutboxList = new List<string[]>();

データベースからデータを取得し、リストを操作します。

OutboxQueryCommand.CommandText = "SELECT top 5 id, status from TableA";      
SqlDataReader OutboxQueryReader = OutboxQueryCommand.ExecuteReader();

while (OutboxQueryReader.Read())
{
    string[] OutBoxFields = new string[7];
    OutBoxFields[0] = OutboxQueryReader["id"].ToString();
    OutBoxFields[1] = OutboxQueryReader["status"].ToString();
    OutboxList.Add(OutBoxFields);
}

foreach (string[] OutBoxFields in OutboxList)
{
    id = OutBoxFields[0];
    status = OutBoxFields[1];

    Thread OutboxThread = new Thread(() => OutboxThreadProcessor(id,status));
    OutboxThread.Start();
}

スレッドごとにメソッドを呼び出します。

 static void OutboxThreadProcessor(string id,string status)
   {
//predefine value of status is "QUE". Process some work here for that perticular item list.if data process success full then need to update 
// the status of the list item 

// need to update the perticular value of that list item here.
How i do it???????
//Say for Example 1-> Success
//            2-> Failed
//            3-> Success            
   }
4

2 に答える 2

1

item[0]が に等しい配列のリストで項目を見つけ、 を にid設定statusする必要がありますitem[1]。このように、ループでそれを行うことができます

foreach (string[] item in OutboxList) {
    if (item[0] == id) {
        item[1] = status;
        break;
    }
}

またはLINQを使用すると、次のようになります。

var item = OutboxList.FirstOrDefault(a => a[0] == id);
if (item != null) {
    item[1] = status;
}

データ構造は特にオブジェクト指向ではないことに注意してください。string次のように、7 つの項目の配列を 7classつの文字列フィールドを持つに置き換えると、プログラムが読みやすくなります。

class OutBoxFields {
    public string Id {get;set;}
    public string Status {get;set;}
    ... // and so on
}
于 2013-09-28T10:22:57.930 に答える