public void ReportProgress(int percent, string message)
 {
     InvokeAsyncOnUiThread(() => OnReportProgress?.Invoke(percent, message));
 }
示例#2
0
        private void ThreadBackground()
        {
            while (true)
            {
                // 检测是否处于暂停的状态
                while (m_isRunningStop)
                {
                    ;
                }
                // 提取处理的任务
                int index = Interlocked.Decrement(ref m_opCount);
                if (index < 0)
                {
                    // 任务完成
                    break;
                }
                else
                {
                    T    item        = m_dataList[index];
                    bool result      = false;
                    bool isException = false;
                    try
                    {
                        if (!m_isQuit)
                        {
                            result = m_operater(item);
                        }
                    }
                    catch (Exception ex)
                    {
                        isException = true;
                        // 此处必须吞噬所有异常
                        OnExceptionOccur?.Invoke(item, ex);

                        // 是否需要退出处理
                        if (m_isQuitAfterException)
                        {
                            EndedOperater();
                        }
                    }
                    finally
                    {
                        // 保证了报告进度时数据的正确性
                        HybirdLock.Enter();

                        if (result)
                        {
                            m_successCount++;
                        }
                        if (isException)
                        {
                            m_failedCount++;
                        }
                        m_finishCount++;
                        OnReportProgress?.Invoke(m_finishCount, m_dataList.Length, m_successCount, m_failedCount);

                        HybirdLock.Leave();
                    }
                }
            }
            JustEnded();
        }
        private void ReportProgress(int progress)
        {
            var eventArgs = new ConversionProgressChangedEventArgs(progress);

            OnReportProgress?.Invoke(this, eventArgs);
        }
 /// <summary>
 /// Translate event to high level
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
 {
     OnReportProgress?.Invoke(this, e);
 }