Opc.Ua.Com.Server.ComDaGroup.AsyncWrite C# (CSharp) Method

AsyncWrite() public method

Starts an asynchronous write operation.
public AsyncWrite ( int transactionId, int serverHandles, DaValue values, int &cancelId ) : int[]
transactionId int The transaction id.
serverHandles int The server handles.
values DaValue The values.
cancelId int The cancel id.
return int[]
        public int[] AsyncWrite(int transactionId, int[] serverHandles, DaValue[] values, out int cancelId)
        {
            TraceState("AsyncWrite", transactionId, serverHandles.Length);
            ThrowIfDisposed();

            cancelId = 0;

            lock (m_lock)
            {
                int[] results = new int[serverHandles.Length];
                List<ComDaGroupItem> items = new List<ComDaGroupItem>(serverHandles.Length);
                List<DaValue> valuesToWrite = new List<DaValue>(serverHandles.Length);

                for (int ii = 0; ii < serverHandles.Length; ii++)
                {
                    ComDaGroupItem item = null;

                    if (!m_itemsByHandle.TryGetValue(serverHandles[ii], out item))
                    {
                        results[ii] = ResultIds.E_INVALIDHANDLE;
                        continue;
                    }

                    items.Add(item);
                    valuesToWrite.Add(values[ii]);
                }

                if (items.Count > 0)
                {
                    ComDaAsnycWriteRequest request = new ComDaAsnycWriteRequest();

                    request.CancelId = ++m_transactionCounter;
                    request.TransactionId = transactionId;
                    request.ServerHandles = new int[items.Count];
                    request.ClientHandles = new int[items.Count];
                    request.Values = valuesToWrite.ToArray();

                    for (int ii = 0; ii < items.Count; ii++)
                    {
                        request.ServerHandles[ii] = items[ii].ServerHandle;
                        request.ClientHandles[ii] = items[ii].ClientHandle;
                    }

                    m_requests.Add(request);
                    cancelId = request.CancelId;

                    TraceState("AsyncWrite Queued", transactionId, request.CancelId);

                    // create a thread to process the request.
                    Thread thread = new Thread(OnAsyncWrite);
                    thread.IsBackground = true;
                    thread.Start(request);
                }

                return results;
            }
        }