`
testcs_dn
  • 浏览: 114392 次
  • 性别: 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#中进行多线程编程以及如何与窗体进行交互。 1. **线程基础**:在C#中,可以使用`System....

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

    标题中的"C#多线程编程实例 线程与窗体交互源码"意味着这个示例将展示如何在线程安全的环境下操作UI组件。在C#中,我们通常使用`Control.Invoke`或`Control.BeginInvoke`方法来解决这个问题。这些方法会在正确的线程...

    WinForm C#多线程等待窗体

    在标题“WinForm 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#多线程编程提供了一个很好的实例,它涵盖了多线程操作、UI同步、进度显示以及并发设计模式等多个重要概念。通过研究和理解这个项目,开发者可以更好地掌握如何在实际项目中应用这些技术...

    c# 委托访问listbox多线程操作

    在 C# 编程语言中,为了确保界面的响应性并避免在执行长时间运行的任务时导致用户界面(UI)冻结,通常会采用多线程技术来处理后台任务。在本案例中,介绍了一种使用委托的方法来安全地更新 UI 元素(特别是 ListBox ...

    C# 多线程 自定义窗体 读取VF数据库

    本项目“C# 多线程 自定义窗体 读取VF数据库”显然是一个利用多线程进行数据库操作,并在用户界面(UI)上提供自定义窗体交互的示例。以下将详细阐述这个项目的知识点: 1. **多线程**:在C#中,可以使用`System....

    C#100个编程实例程序

    8. **多线程编程**:C#支持多线程,实例可能包含线程的创建、同步和互斥操作,帮助开发者理解并发执行和线程安全。 9. **高级特性**:C#新版本不断引入新特性,如LINQ(Language Integrated Query)、async/await...

    C#中Socket多线程编程实例.pdf

    在本实例中,我们将探讨如何在C#中实现基于Socket的多线程编程。通过实例,我们将展示如何创建一个TCP客户端,利用多线程技术实现网络通信,以及如何在Windows窗体应用程序中处理用户界面(UI)的更新。 首先,我们...

    C#多线程解决界面卡死问题的完美解决方案_极简版

    在C#编程中,UI(用户界面)卡死通常是由于主线程被长时间占用,无法响应用户的交互事件。这种问题在处理耗时操作时尤为常见,比如大数据计算、网络请求或大量文件读写。多线程技术是解决这个问题的有效手段,它能够...

    C# 线程A访问非线程A创建的控件 、 线程内创建窗体置顶显示ShowDialog

    在C#编程中,线程安全性和多线程交互是一个重要的主题。特别是在Windows Forms或WPF应用程序中,UI(用户界面)元素通常由主线程创建并管理,而其他后台线程可能需要与这些UI元素进行交互。这涉及到跨线程访问控件的...

    C#多线程解决界面卡死问题的完美解决方案

    在C#编程中,多线程技术是一种关键的性能优化手段,尤其对于处理耗时操作时,能够确保用户界面(UI)的响应性,避免出现界面卡死的现象。本解决方案将深入探讨如何利用C#的多线程特性来解决这个问题。 一、线程基础...

    C#多线程编程(一)

    ### C#多线程编程(一) #### 一、多线程的概念 多线程是计算机编程中的一个重要概念,指的是在一个程序中同时执行多个任务的能力。当我们运行一个应用程序时,操作系统会在内存中为该程序分配一定的空间,并加载...

    C#多线程调用Winform窗体[文].pdf

    标题《C#多线程调用Winform窗体》涉及的是C#编程语言中多线程环境下对Winform窗体进行操作的技术点。Winform即Windows窗体应用程序,是C#常用的一种桌面应用程序开发方式。由于GUI窗体通常不是线程安全的,所以在多...

    c#编程跨线程调用窗体的方法

    在C#编程中,尤其是在涉及到图形用户界面(GUI)的应用程序开发时,经常会遇到需要在不同的线程之间进行数据交互或控制的情况。例如,在进行长时间的任务处理(如文件复制、网络请求等)时,为了避免主界面的冻结,...

    C# 多线程,自定义窗体,读取VF数据库最终修改

    在本项目"**C# 多线程,自定义窗体,读取VF数据库最终修改**"中,我们将深入探讨如何利用C#进行多线程编程、创建自定义窗体以及操作VF(可能是Visual FoxPro)数据库,最终将数据导出为CSV格式以供Excel使用。...

    c#窗体应用程序实例

    在C#编程领域,窗体应用程序(Windows Forms)是创建桌面应用的基本框架,它为开发者提供了丰富的用户界面组件和事件处理机制。这个“c#窗体应用程序实例”压缩包很显然是一个面向C#初学者的教学资源,包含了多个...

Global site tag (gtag.js) - Google Analytics