• task 子线程处理队列数据


    模拟多线程处理数据的时间

    namespace reportfile.MultiThread
    {
        public delegate void DelegateShowStateInfo(string state);
    
        public class TestThread
        {
            private Queue<QueueInfo> _ListQueue;
            private bool _Exit = false;//线程是否退出
            private static Form _OwnerForm; //測試的窗體
            private DelegateShowStateInfo _StateMethod;
    
            public TestThread(Form sender, DelegateShowStateInfo method)
            {
                _StateMethod = method;
                _OwnerForm = sender;
            }
    
            public void HandelData()
            {
                Task.Factory.StartNew(new Action(() =>
                {
                    Start();//启动后台线程 
                    for (int index = 1; index <= 10; index++)//PageIndex
                    {
                        try
                        {
                            //队列有数据等于3的时候休眠3秒
                            while (_ListQueue.Count >= 3)
                            {
                                Thread.Sleep(1000);
                            }
                            //模拟获取数据 
                            Thread.Sleep(3000);
                            _ListQueue.Enqueue(new QueueInfo() { code = index.ToString() });
                        }
                        catch (Exception Ex)
                        {
                            Console.Write(Ex.Message.ToString());
                        }
                    }
                    _Exit = false;
                }));
            }
    
            public void Start()//启动  
            {
                _ListQueue = new Queue<QueueInfo>();//队列
                _Exit = true;
                //Task task = new Task(() => threadStart());
                //task.Start();
                Thread thread = new Thread(threadStart);
                thread.IsBackground = true;
                thread.Start();
                //thread.Join();
            }
    
            private void threadStart()
            {
                while (_Exit)
                {
                    while (_ListQueue.Count > 0)
                    {
                        try
                        {
                            //从队列中取出  
                            QueueInfo queueinfo = _ListQueue.Dequeue();
                            //模拟处理数据 Parallel.For  处理数据
                            Thread.Sleep(3000);
                            if (_OwnerForm != null)
                            {
                                _OwnerForm.Invoke(_StateMethod, queueinfo.code);
                                Application.DoEvents();
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.Write("队列:" + ex.Message.ToString());
                        }
                    }
                }
                if (!_Exit)
                {
                    if (_OwnerForm != null)
                    {
                        _OwnerForm.Invoke(_StateMethod, "结束");
                        Application.DoEvents();
                    }
                }
            }
        }
    }

    窗体调用

            private TestThread _testThread;
    
            public frmMultiThreading()
            {
                InitializeComponent();
            }
    
            private void frmMultiThreading_Load(object sender, EventArgs e)
            {
                _testThread = new TestThread(this, ShowData);
            }
    
            private void ShowData(string state)
            {
                this.BeginInvoke(new Action(() => { textBox1.Text += state + "         "; }));
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                _testThread.HandelData();
            }

    效果

  • 相关阅读:
    石子游戏2
    礼物的最大价值
    CF512D. Fox And Travelling
    arc099F
    CF504E. Misha and LCP on Tree(长链剖分求k级祖先)
    agc031D
    CF555E. Case of Computer Network
    agc023D
    CF1406E. Deleting Numbers
    CF585F. Digits of Number Pi
  • 原文地址:https://www.cnblogs.com/shuaimeng/p/15759472.html
Copyright © 2020-2023  润新知