国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

[點晴永久免費OA]C#多線程的啟動與停止

admin
2022年11月25日 15:17 本文熱度 2313
文章簡介:線程在開發中作用很大,也經常用到,本文以Winfrom演示Redis隊列的案例,來看一看線程的啟動和停止,已經線程中操作winform的控件。

首先畫個winform界面


先看代碼

using System;
using System.Threading;
using System.Windows.Forms;
using EastWestWalk.NetFrameWork.Redis;
namespace Producer
{
    public partial class FrmMain : Form
    {
        private static string queueid = "MqId001";//隊列id
        private static bool IsStrat = false;//是否繼續生產信息
        private Thread StartThread = null;//生產線程
        private static bool IsEnd = false;//是否繼續消費信息
        private Thread EndThread = null;//消費線程
        public FrmMain()
        {
            InitializeComponent();
        }
        /// <summary>
        ///開始生產按鈕事件
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void btn_start_Click(object sender, EventArgs e)
        {
            if (btn_start.Text == "開始生產")
            {
                IsStrat = true;
                StartThread = new Thread(EnqueueRun);
                StartThread.Start();
                btn_start.Text = "正在生產";
            }
            else
            {
                IsStrat = false;
                Thread.Sleep(50);//這里很重要 不然線程任務還沒結束 會報錯
                if (StartThread != null && StartThread.ThreadState == ThreadState.Running)
                {
                    StartThread.Abort();
                    StartThread = null;
                }
                btn_start.Text = "開始生產";
            }
        }
        /// <summary>
        ///開始消費按鈕事件
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void btn_end_Click(object sender, EventArgs e)
        {
            if (btn_end.Text == "開始消費")
            {
                IsEnd = true;
                EndThread = new Thread(DequeueRun);
                EndThread.Start();
                btn_end.Text = "正在消費";
            }
            else
            {
                IsEnd = false;
                Thread.Sleep(50);
                if (EndThread != null && EndThread.ThreadState == ThreadState.Running)
                {
                    EndThread.Abort();
                    EndThread = null;
                }
                btn_end.Text = "開始消費";
            }
        }
        /// <summary>
        /// 批量生產
        /// </summary>
        private void EnqueueRun()
        {
            using (var client = new DoRedisString(RedisUtility.RedisConfig))
            {
                int i = 0;
                while (IsStrat)
                {
                    string str = i + DateTime.Now.Ticks.ToString();
                    client.Core.EnqueueItemOnList(queueid, str);
                    txt_log.BeginInvoke(new Action(() =>
                    {
                        txt_log.AppendText($"生產:{str}\n");
                        txt_log.selectionStart = txt_log.TextLength;
                        txt_log.ScrollToCaret();
                    }));
                    i++;
                    Thread.Sleep(20);
                }
            }
        }
        /// <summary>
        ///批量消費
        /// </summary>
        private void DequeueRun()
        {
            using (var client = new DoRedisString(RedisUtility.RedisConfig))
            {
                while (IsEnd)
                {
                    if (client.Core.GetListCount(queueid) > 0)
                    {
                        string result = client.Core.DequeueItemfromList(queueid);
                        txt_log.BeginInvoke(new Action(() =>
                        {
                            txt_log.AppendText($"消費:{result}\n");
                            txt_log.selectionStart = txt_log.TextLength;
                            txt_log.ScrollToCaret();
                        }));
                        RedisUtility.SetRedis(result, $"消費成功:{result}", DateTime.Now.AddSeconds(30));
                        Thread.Sleep(20);
                    }
                    else
                    {
                        //如果當前隊列為空,掛起1s
                        Thread.Sleep(1000);
                        client.Core.EnqueueItemOnList(queueid, "0");
                    }
                }
            }
        }
    }
}

兩個線程,可以互不干擾的進行快速生產和消費,而且不會卡主線程

跨線程操作控件

                        txt_log.BeginInvoke(new Action(() =>
                        {
                            txt_log.AppendText($"消費:{result}\n");
                            txt_log.selectionStart = txt_log.TextLength;
                            txt_log.ScrollToCaret();
                        }));

該文章在 2022/11/25 15:18:02 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 亚洲国产精品成人无码区 | 国产激情电影综合在线看 | 欧美日韩国产小电影 | 精品人妻伦一二三区久久AAA片 | 亚洲AV无码A片在线观看蜜芽 | 91久久午夜无码 | 日韩欧美一区黑人vs日本人 | 亚洲无码永久免费视频 | 97精品国产 | 日韩美女自卫慰黄网站 | 91精品国产免费青青碰在线观看 | 日韩欧美视频一区二区在线观看 | 边做边爱完整版免费视频播放 | 欧美日韩国产综合第一区 | 日韩免费无码视频一区二区三 | 免费无码国产在线观国内自拍中文字幕 | 国产精东剧天美传媒影视 | 日本一区二区三区无码苍井空 | 精品偷窥熟女精品视频 | 午夜精品久久久久久久第一页 | 日本黄H兄妹H动漫一区二区三区 | 亚洲AV秘无码一区二区三区久 | 国产蝌蚪视频在线观看 | 午夜色大片在线观看 | 伊人久久综合 | 精品香蕉久久久爽爽 | 亚洲国产欧美在线人成最新 | 欧美 日韩 综合 无码 专区 | 国色天香视频在线社区 | 男男双性高H浪荡合集 | 人妻丰满熟妇av无码区不卡 | 麻豆md0077饥渴少妇 | 99久久久国产精品免费蜜臀 | 日本丰满大乳人妻无码 | 精品亚洲成a人在线观看青青 | 精品国产日韩一区2区3区 | 国产精品毛片无码 | 女同一区二区三区在线 | 欧美另类癖好手机在线网 | 亚洲色欲一区二区三区在线观看 | 7799精品視頻免費觀看 |