をもたらし、私の質問です: C#ロックを同時に/書き込みおよび表示を読むためには、ここで
が、私はこのプログラムを持っていると言う(私はできる限りをsemplifyしようとするでしょう): receiveResultThread貴様ネットワークからの結果のために待ち displayResultToUIThreadは受信したすべての結果をUIに反映します。class Program
{
private static Tests TestHolder;
static void Main(string[] args)
{
TestHolder = new Tests();
Thread receiveResultsThread = new Thread(ReceiveResult);
receiveResultsThread.Start();
Thread displayResultToUIThread = new Thread(DisplayResults);
displayResultToUIThread.Start();
Console.ReadKey();
}
public static void ReceiveResult()
{
while (true)
{
if (IsNewTestResultReceivedFromNetwork())
{
lock (Tests.testLock)
TestHolder.ExecutedTests.Add(new Test { Result = "OK" });
}
Thread.Sleep(200);
}
}
private static void DisplayResults(object obj)
{
while (true)
{
lock (Tests.testLock)
{
DisplayAllResultInUIGrid(TestHolder.ExecutedTests);
}
Thread.Sleep(200);
}
}
}
class Test
{
public string Result { get; set; }
}
class Tests
{
public static readonly object testLock = new object();
public List<Test> ExecutedTests;
public Tests()
{
ExecutedTests = new List<Test>();
}
}
class UIManager
{
public static void DisplayAllResultInUIGrid(List<Test> list)
{
//Code to update UI.
}
}
範囲は、他のスレッドがリストにテストを追加し、それを使用しても安全であるされている間UIを更新しないことであることを考慮:
lock (Tests.testLock)
か、私が使用する必要があります。
lock (TestHolder.testLock)
(testLockの静的プロパティを変更しています)?
これはこの種のプログラムを書く良い方法だと思いますか、より良いパターンを提案できますか?
ありがとうございました!
msdn:https://msdn.microsoft.com/en-us/library/kzy257t0(v=vs.110).aspx – jdweng
を参照してください。どのフレームワークをターゲットにしていますか? 4.0以上を使用している場合は、タスクを使用する必要があるため、これを尋ねます。https://msdn.microsoft.com/en-us/library/dd537609(v=vs.100).aspx – taquion