Mohl by mi prosím někdo poradit jak realizovat předávání si seznamu List<object> mezi vlákny. Mám třídu DeviceThreadClass, která mi čte data ze zařízení ve vlastním vláknu. Těch zařízení mám více, pro každé je spuětěno jedno vlákno. Pak bych potřeboval ta data v jiném vláknu zpracovávat (ProcessThreadClass) a v dalším pak vypisovat (OutputThreadClass) nebo archivovat. díky moc
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<DeviceThreadClass> listOfDevices = new List<DeviceThreadClass>();
// ziskavni dat
for (int i = 0; i < 10; i++)
listOfDevices.Add(new DeviceThreadClass("vlakno" + i.ToString()));
// zpracovavani dat
ProcessThreadClass process = new ProcessThreadClass();
// vypis dat
OutputThreadClass output = new OutputThreadClass();
Console.ReadLine();
}
/// <summary>
/// Trida, ktera zpracovava data ze vsech vlaken z listOfDevices.
/// (napr. hlida prvni promennou v seznamu
/// a pokud preleze nejakou mez, tak ji vynuluje)
/// </summary>
public class ProcessThreadClass
{
}
/// <summary>
/// Vlakno, ktere kazdych napr. 500ms zobrazuje na konzoli hodnoty prvni promenne ze seznamu
/// ze vsech vlaken z listOfDevices
/// </summary>
public class OutputThreadClass
{
}
/// <summary>
/// Trida, ktera ziskava data a uklada je do seznamu listOfData
/// </summary>
public class DeviceThreadClass
{
public List<object> listOfData;
protected Thread thread;
/// <summary>
/// vytvori listOfData a spusti vlakno
/// </summary>
/// <param name="name"></param>
public DeviceThreadClass(string name)
{
listOfData = new List<object>();
listOfData.Add(new object());
listOfData.Add(new object());
thread = new Thread(new ThreadStart(DoWork));
thread.Name = name;
thread.Start();
}
/// <summary>
/// Simulace ziskavani dat.
/// </summary>
internal void DoWork()
{
int i = 0;
decimal d = 0;
while (true)
{
listOfData[0] = i++;
listOfData[1] = d += 0.1m;
//Console.WriteLine("{0}: {1} {2}", thread.Name, listOfData[0], listOfData[1]);
Thread.Sleep(100);
}
}
}
}
}
|