Queue<opcdatastructure.opcservertags> OPCitemQueue = new Queue<opcdatastructure.opcservertags>(); private void DataChangeHandler(object sender, DataChangeEventArgs e) { try { var thstoredatatable = new System.Threading.Thread(producer); thstoredatatable.Start(e); } catch { } } producer(object e) { lock (myLockHolder) { DataChangeEventArgs e113 = (DataChangeEventArgs)e; int i ; for (i=0; i < e113.sts.Length; i++) { opctag = new opcdatastructure.opcservertags(); opctag.value = Convert.ToString(e113.sts[i].DataValue); opctag.tagtimestamp = DateTime.FromFileTime(e113.sts[i].TimeStamp); opctag.itemID = e113.sts[i].HandleClient; opctag.quality = e113.sts[i].Quality; int hour113 = e113.sts[i].TimeStampNet.Hour; int minute113 = e113.sts[i].TimeStampNet.Minute; int second113 = e113.sts[i].TimeStampNet.Second; int millisecond113 = e113.sts[i].TimeStampNet.Millisecond; int year113 = e113.sts[i].TimeStampNet.Year; int month113 = e113.sts[i].TimeStampNet.Month; int day113 = e113.sts[i].TimeStampNet.Day; DateTime sdate113 = new DateTime(year113, month113, day113, hour113, minute113, second113, millisecond113); opctag.filetimestamp = sdate113.ToString("dd-MM-yyyy HH:mm:ss.fff"); lock (OPCitemQueue) { OPCitemQueue.Enqueue(opctag); Monitor.Pulse(OPCitemQueue); } consumer consumer = new consumer(OPCitemQueue); while (threaddatatable == null) { threaddatatable = new System.Threading.Thread(ThreadRun); threaddatatable.Start(); threaddatatable.Join(); } } public void ThreadRun()//excutes 8 times { try { lock (OPCitemQueue) { if (OPCitemQueue.Count == 0) { Monitor.Wait(OPCitemQueue); } opcdatastructure.opcservertags opctag = OPCitemQueue.Dequeue(); if (prameterupdate.X12 == 0) { prameterupdate.X12 = 1; pu.update1(opctag.value, opctag.filetimestamp, opctag.tagtimestamp, opctag.quality, opctag.itemID); } } } catch { } }</opcdatastructure.opcservertags></opcdatastructure.opcservertags>
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)