이 질문의 대답에 제공된대로 Windows 콘솔 응용 프로그램에서 threadsafe 데이터 세트 업데이트 작업을 구현했습니다.RefreshType 매개 변수가있는 메소드를 사용하여 threadsafe 전역 데이터 세트를 업데이트하십시오.
은 내가 데이터 집합 행을 업데이트하기 위해 다음과 같은있어 접근 방식을 다시 한 번 확인하고 싶다.
각 스레드에는 UpdateData 인스턴스 메서드가 있습니다. 이 메소드는 기본 키의 문자열 배열을 작성하여 datatable에 특정 행을 찾고 해당 행에서 업데이트 할 데이터 사전을 작성합니다.
private void UpdateData()
{
string[] key=new string(){"",""};
Dictionary<string,string> data=new Dictionary<string,string>();
key[0]="key1";
key[1]="key2";
data.Add("col1","value1");
data.Add("col2","value2");
MyDataSet.UpdateRecord(key,data);
}
이제 전역 데이터 집합의 DataTable 행을 업데이트하는 데 사용되는 공유 방법이 있습니다. 정적 공유 방법을 참조 타입입니다 키와 데이터를 전달하는이 방법은 안전을 스레드에 문제를 부과하는 경우
public sealed class MyDataSet
{
public static DataSet ds= new DataSet();
private static object _lock =new object();
public static UpdateRow(string[] key,Dictionary<string,string> data)
{
lock(_lock){
DataRow dr=ds.Tables[0].Rows.Find(key);
dr.AcceptChanges();
dr.BeginEdit();
foreach(KeyValuePair<string,string> field in data)
{
dr[field.key]=field.value;
}
dr.EndEdit();
}
}
}
그래서 제 질문은? 키와 데이터는 공유되지 않으며 각 스레드는 자체 사본을 작성합니다. 두 스레드가 UpdateRow 메서드를 입력하면 임의의 스레드에서 전달 된 키와 다른 스레드의 데이터를 사용하여 행을 업데이트 할 수 있습니까? (이 질문은 어리석은 소리입니다)