示例#1
0
        private object[] Perform(
            int nCallStartIndex,
            int nCount,
            AsyncCallback callBack,
            bool needResults)
        {
            object[]       Results = new object[nCount];
            IAsyncResult[] ars     = new AsyncResult[nCount];

            for (int i = 0; i < nCount; i++)
            {
                CallEntry oCall =
                    (CallEntry)m_oCallEntries[i + nCallStartIndex];

                ars[i] = oCall.BeginInvoke(callBack, oCall);
            }

            if (callBack == null && needResults)
            {
                for (int i = 0; i < nCount; i++)
                {
                    CallEntry oCall =
                        (CallEntry)m_oCallEntries[i + nCallStartIndex];

                    Results[i] = oCall.EndInvoke(ars[i]);
                }
            }

            return(Results);
        }
示例#2
0
        public object[] Perform(AsyncCallback callBack, bool needResults)
        {
            int nCurrCallIndex = 0;

            List <object> finalResults = new List <object>();

            object[] Results;

            while (nCurrCallIndex < m_oCallEntries.Count)
            {
                int nThreads = GetThreadsToUse();

                if (nThreads > 1)
                {
                    // Invoke asynchronously
                    int nCount = Math.Min(
                        nThreads,
                        m_oCallEntries.Count - nCurrCallIndex);

                    Results = Perform(nCurrCallIndex, nCount, callBack, needResults);

                    nCurrCallIndex += nCount;
                }
                else
                {
                    // Invoke synchronously
                    CallEntry oCall = (CallEntry)m_oCallEntries[nCurrCallIndex];

                    Results = new object[] { oCall.Invoke() };

                    nCurrCallIndex++;
                }

                foreach (object result in Results)
                {
                    finalResults.Add(result);
                }
            }

            return(finalResults.ToArray());
        }
示例#3
0
        public void Add(Delegate pfDelegate, object[] Params)
        {
            CallEntry oCallEntry = new CallEntry(pfDelegate, Params);

            m_oCallEntries.Add(oCallEntry);
        }