wpf 多线程操作(2)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{

    public delegate void RunHandler(object a,message mess);
    public delegate void RunHandler1();
    public partial class Form1 : Form
    {
        Thread th;
        Fox fox;
        public Form1()
        {
            InitializeComponent();

            fox = new Fox("小智");

            label1.Text =fox.Name;

            fox.RunEvent += fox_RunEvent1;

            fox.RunEvent1+=fox_RunEvent1;

            //button1.Click+=button1_Click;
        }

        private void fox_RunEvent1()
        {
            System.Threading.Thread.Sleep(1000);//延迟一秒
            if (textBox1.InvokeRequired)
            {
                RunHandler1 rh = new RunHandler1(Run);
                textBox1.Invoke(rh);
            }
            else
            {
                textBox1.Text = "我去了,主淫";
            }

        }

        private void fox_RunEvent1(object a, message mess)
        {
            textBox2.Text = "上吧!皮卡丘";
        }

        //private void fox_RunEvent1()
        //{
        //    textBox2.Text = "皮卡丘";
        //}

        //private void fox_RunEvent()
        //{
        //    textBox1.Text = "上吧";
        //}

        class Fox
        {
            private string _Name;

            public string Name
            {
                get { return _Name; }
                set { _Name = value; }
            }
            public Fox(string name)
            {
                _Name = name;
            }

            public event RunHandler RunEvent;
            public event RunHandler1 RunEvent1;

            public void BeShooted()
            {
                if (RunEvent!=null)
                {
                    RunEvent(this, new message() {Message="我去了,主淫"});
                }
            }

            public void BeShooted1()
            {
                if (RunEvent1!=null)
                {
                    RunEvent1();
                }
            }
        }

        int i = 0;
        private void button1_Click(object sender, EventArgs e)
        {

            if (i==0)
            {
                fox.BeShooted();
                th = new Thread(new ThreadStart(Run));
                th.Start();
                i = 1;
            }
            else
            {
                textBox1.Text = "";
                textBox2.Text = "";
                i = 0;
            }
            //th.Abort();
            button1.Text = button1.Text.Equals("准备") ? "嗖。。" : "准备";
        }
        private void Run()
        {
            fox.BeShooted1();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
    public class message : EventArgs
    {
        public string Message
        {
            get;
            set;
        }
    }
}
时间: 2024-07-28 16:04:17

wpf 多线程操作(2)的相关文章

wpf 多线程操作例(1)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; //线程操作引用的命名空间 namespace windowform线程操作 { /

C#中级-常用多线程操作(持续更新)

一.前言       多线程操作一直是编程的常用操作,掌握好基本的操作可以让程序运行的更加有效.本文不求大而全,只是将我自己工作中常常用到的多线程操作做个分类和总结.平时记性不好的时候还能看看.本文参考了多篇园子里的精彩博文,在文章最后会贴出具体来源,感谢他们的无私奉献. 二.关于线程 (1) 为何使用线程: 可以使用线程将代码同其他代码隔离,提高应用程序的可靠性: 可以使用线程来简化编码: 可以使用线程来实现并发执行. (2) 进程.应用程序域以及线程的关系: 进程(Process)是Wind

iOS 数据库多线程操作

SQLite是支持多线程操作的, 需要在初始化database是做一个线程安全的config,参考下面链接,看起来比较复杂. http://www.cnblogs.com/wfwenchao/p/3964213.html 很多iOS项目中都使用FMDB这个第三方开源库,但FMDB不能在多个线程中共同一个FMDatabase对象,因为这个类本身不是线程安全的,如果这样使用会造成数据混乱等问题. 如要需要多线程操作数据库,那么就需要使用FMDatabaseQueue来保证线程安全了. 首先用一个数据

黑马程序员-Java多线程操作

--Java培训.Android培训.iOS培训..Net培训.期待与您交流!--- Java中的线程 一个程序的运行需要启动一个应用进程,一个进程可以创建多个线程,帮助应用完成多任务操作,实现并发运行.在Java中线程是被封装成Thread类,进行多线程操作时只需要继承一个Thread类,实现自己的功能即可,然后开启此线程,或者你也可以实现一个Runnable接口,然后将其传递给Thread对象,然后再启动它. 线程的创建于启动 继承Thread 创建一个类并继承Thread类,然后实现Thr

IE exp中的多线程操作

最近在写cve-2014-0321这个漏洞的poc,分析的时候发现这流程简直就是个坑(越写越坑!!),没办法只能照着古河的思路,利用多线程进行操作.虽然知道多线程操作用window.open去创建,但调用了之后发现一直创建的都是个进程,根本就没有线程啊,简直就是个坑啊.后来无数次的尝试之后才发现,之前一直本地进行IE漏洞的调试,这样子使用window.open打开的总是一个进程,这样子也就没办法实现利用或者是占位.之后,用python架了简易的web服务,web的方式来访问,才发现window.

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

DataTable多线程操作报错情况

最近在写一个http接口时用了DataTable这个强大的利器,接口用浏览器跑起来没任何问题.当时也没考虑并发问题,后来用一个压力测试工具做大并发测试,1000+/s次速度测试.发现程序报错了.程序报错了第一反应还是去检查代码,是不是代码出现问题.发现逻辑都是对的,然后用浏览器打开接口,发现一切OK;然后心想肯定是并发时多个线程操作导致的. 我们都知道在多线程的时候不同的线程访问同一个资源的时候,用lock方法来达到线程同步,也就是同一个时刻同一个资源只能被一个线程操作. 我开始在操作DataT

MFC的多线程操作

记得用MFC做了一个图像自动修复软件,当时没有多线程操作这一概念,由于图像修复算法比较复杂,因此,当执行图像修复时,程序就像卡死了似得而不能做其他操作.其实MFC对这种情况有一种很好地解决方案,那就是采用多线程编程技术.以图像修复算法为例,由于其本身需要耗费大量时间,因此我们可以单独开一个线程让他执行修复而不影响主程序的操作. 关于线程的一些概念,以及在VS2013下的实例: MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的

WPF多线程访问控件

大家知道WPF中多线程访问UI控件时会提示UI线程的数据不能直接被其他线程访问或者修改,该怎样来做呢? 分下面两种情况 1.WinForm程序 1 2 1)第一种方法,使用委托: 3 private delegate void SetTextCallback(string text); 4 private void SetText(string text) 5 { 6 // InvokeRequired需要比较调用线程ID和创建线程ID 7 // 如果它们不相同则返回true 8 if (thi