`
mybwu_com
  • 浏览: 178540 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

C#多线程编程实例 线程与窗体交互

 
阅读更多

C#多线程编程实例 线程与窗体交互

代码:

    public partial class Form1 : Form
    {
        //声明线程数组
        Thread[] workThreads = new Thread[10];

        public Form1()
        {
            InitializeComponent();
        }

        //此委托允许异步的调用为Listbox添加Item
        delegate void AddItemCallback(string text);

        //这种方法演示如何在线程安全的模式下调用Windows窗体上的控件。
        private void AddItem(string text)
        {
            if (this.listBox1.InvokeRequired)
            {
                AddItemCallback d = new AddItemCallback(AddItem);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.listBox1.Items.Add(text);
            }
        }

        //数据采集方法
        public void DataGet()
        {
            while (true)
            {
                AddItem("ok");
                Thread.Sleep(1000);
            }
            //如果此方法退出了,那么这个线程也就退出了
        }

        /// <summary>
        /// 启动线程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //循环创建并启动线程执行
            for (int i = 0; i < workThreads.Length; i++)
            {
                if (workThreads[i] == null)
                {
                    //如果线程不存在,则创建
                    workThreads[i] = new Thread(new ThreadStart(DataGet));
                    workThreads[i].Name = i.ToString();
                    workThreads[i].Start();
                }
                else
                {
                    //已经存在,如果没有运行,则启动
                    if (workThreads[i].ThreadState == ThreadState.Aborted || workThreads[i].ThreadState == ThreadState.Stopped)
                    {
                        workThreads[i] = new Thread(new ThreadStart(DataGet));
                        workThreads[i].Name = i.ToString();
                        workThreads[i].Start();
                    }else{
                        workThreads[i].Start();
                    }
                }
            }
        }

        /// <summary>
        /// 停止线程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //循环停止线程执行
            for (int i = 0; i < workThreads.Length; i++)
            {
                //如果线程存在,并且状态不是停止也不是终止的,则终止该线程
                if (workThreads[i] != null && workThreads[i].ThreadState != ThreadState.Stopped && workThreads[i].ThreadState != ThreadState.Aborted)
                {
                    workThreads[i].Abort();
                }
            }
        }
    }

源码下载:http://download.csdn.net/detail/testcs_dn/7618881

分享到:
评论

相关推荐

    C#多线程编程实例 线程与窗体交互源码.rar

    C#多线程编程实例 线程与窗体交互源码.rar

    C#多线程编程实例 线程与窗体交互源码

    C#多线程编程实例 线程与窗体交互源码,该示例演示如何在线程安全的模式下调用Windows窗体上的控件。

    C#Socket多线程编程实例

    C#Socket多线程编程实例,以C#为开发工具,实现了多线程的通信

    VB.Net-C#多线程Thread-代理委托delegate编程

    C#多线程编程简单实例.txt C#多线程窗体控件安全访问.txt C#多线程使用TextBox控件 .txt C#多线程注意点.txt Control的Invoke和BeginInvoke.txt Invoke和BeginInvoke的真正含义.txt NET异步调用模式.txt TreeView...

    C#多线程笔记

    C#多线程笔记 每个窗体都有自己的都在不同的线程上运行,如果需要在窗体之间交互,就需要在线程之间交互。

    c#多线程程序设计实例方法

    今天小编给大家介绍下C#里的多线程技术。主要是让大家学会线程的创建和启动方法,理解在线程中如何通过委托和窗体控件交互,同时练习IPAddress类、Dns类、IPHostEntry类的基本用法。 1、打开Microsoft Visual ...

    C#多任务多线程下载组件V1.1(源代码)

    支持多个下载任务,分块多线程下载,断点续传。 (对比上个版本,完成了遗留的功能,修改了事件触发过程及处理方式,重新整理了代码及注释) 内含两个窗体,可视为演示程序。 DownloadForm 下载窗体,含相关事件...

    C#多任务多线程下载组件V1.1[源代码]

    支持多个下载任务,分块多线程下载,断点续传。 (对比上个版本,完成了遗留的功能,修改了事件触发过程及处理方式,重新整理了代码及注释) 内含两个窗体,可视为演示程序。 DownloadForm 下载窗体,含相关事件...

    C#等待窗体的实现

    C#实现的等待窗体,采用多线程技术。效果不错,用动画进行播放。

    winform多线程示例

    winform多线程与窗体数据交互 C# winform thread

    wpf编程宝典c#2010版pdf(全)1/3包,共118M

    书中不仅全面介绍了常见的图形界面编程技术,而且对WPF中非常有特色的文档和打印、音频和视频、动画、3D图形开发、多线程和插件等内容也进行了比较深入的介绍。 第1章 WPF概述  1.1 Windows图形演化  1.1.1 ...

    C#线程委托实现原理及方法解析

    很多时候写windows程序都需要结合多线程,在C#中用如下得代码来创建并启动一个新的线程。 Thread thread = new Thread(new ThreadStart(ThreadProc));//实例化一个线程 thread.IsBackground = true;//将线程改为...

    WPF编程宝典c#2010

    WPF编程宝典c#2010中文电子书,绝对适合初学者。 目录:第1章 wpf概述 第2章 xaml 第3章 布局 第4章 依赖项属性 ...第30章 与windows窗体的交互 第31章 多线程 第32章 插件模型 第33章 clickonce部署

Global site tag (gtag.js) - Google Analytics