一个关于C#多线程与定时器的问题

问题描述

一个关于C#多线程与定时器的问题

private void button4_Click(object sender, EventArgs e)
{
DataGetThreads[0] = new Thread(new ThreadStart(DataGet));
DataGetThreads[0].Start();

    }
                  public void DataGet()
    {

        timerDraw.Interval = 200;
        timerDraw.Start();
        //MessageBox.Show("如果加上这句")①
    }
    private void timerDraw_Tick(object sender, EventArgs e)
    {
        MessageBox.Show("已开始定时");②
    }

        从按下button4开始,   为什么如果我没有写①这句语句,系统就不会执行②这句语句,系统没有反应;如果我写了①这句,执行结果是弹出“如果加上这句”这个窗口,然后无限地弹出“已开始定时”?很不解,为什么加了一句话定时器就工作,没加就不工作?是不是多线程和定时器有冲突?求解!谢谢!

解决方案

你的Timer是在DataGetThreads[0]线程下启动的,所以你的Timer必须在这个线程运行存在时才会触发timer的事件(timerDraw_Tick),如果你不用MessageBox的话(①这句语句),执行完后DataGetThreads[0]线程就退出了,所以你的timer不会生效。
你你使用MessageBox.Show能是你的DataGetThreads[0]线程不退出,所以timer是有效的。

解决方案二:

你多线程在哪呢,怎写的,form里面的timer不是异步的,会阻塞主线程

时间: 2024-11-01 01:24:54

一个关于C#多线程与定时器的问题的相关文章

一个简单的多线程即时通讯程序(类似QQ,MSN)

本文实现一个简单的多线程客户/服务器即时通讯应用程序,它将使用TCP连接.允许客户之间及客户 和服务器之间,个人消息与会议通信.最终目标是实现象雅虎/msn这样的即时通讯工具. [库] 我创建一个ChatLibrary,它包含命令及可以着色的消息.public enum Command { Login = 0, PersonalMessage = 1, ClientList = 2, Conference = 3, Logout = 4 }; public class Message { str

Linux下一个简单的多线程互斥锁的例子

本篇文章是对Linux下一个简单的多线程互斥锁的例子进行了分析介绍,需要的朋友可以参考下   复制代码 代码如下: #include <stdio.h> #include <pthread.h> pthread_mutex_t Device_mutex ; int count=0; void thread_func1() {    while(1)    {        pthread_mutex_lock(&Device_mutex);        printf(&q

用Python实现一个简单的多线程TCP服务器的教程

  这篇文章主要介绍了用Python实现一个简单的多线程TCP服务器的教程,示例的运行环境为Windows操作系统,需要的朋友可以参考下 最近看<python核心编程>,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线程. 其实python在类的设计上已经考虑到了这一方面的需求,我们只要在自己的server上继承一下SocketServer.BaseRequestHandl

java-如何判断一个系统是多线程系统,还是单线程系统

问题描述 如何判断一个系统是多线程系统,还是单线程系统 java开发中 如何判断一个系统是多线程系统,还是单线程系统 解决方案 多线程的同步,就是保证不会出现多个线程同时访问同一个数据的情况,如果有这种情况,就要加同步锁! 解决方案二: 单线程系统是多线程系统的特例. 即便你没有创建任何额外的线程,你调用的库,以及jvm本身也会创建额外的线程. 解决方案三: 但是你可以看你的计算机有几个处理器(内核),在任务管理器中可以看到.一个单处理器的系统,无论是单线程还是多线程,同时只能执行一个线程. 解

c++-一个关于C++多线程socket 套接字的问题

问题描述 一个关于C++多线程socket 套接字的问题 如下博客中的代码是不是缺客户端的代码了,本人是初学者,菜鸟一枚,想要个全的呆猫,麻烦谁提供一下,谢啦http://blog.csdn.net/chw1989/article/details/7453217 解决方案 http://blog.csdn.net/u012592081/article/details/38274881一个简单的socket tcp编程. 解决方案二: 简单的SOCKET编程完全没达到你的要求,文件传输,你可以增加

JDBC一个connection下多线程查询表数据会产生线程等待

问题描述 JDBC一个connection下多线程查询表数据会产生线程等待 案例: 从Oracle数据库将表及数据通过JDBC的方式采集到另一Oracle数据库,数据量均为千万级,从源数据库读取的时候采用ORACLE的ROWNUM分页方式,JDBC每次读取1000条,批量插入目标库,测试发现ORACLE的ROWNUM分页效率很是问题,越到后面越慢,WEBLOGIC后台甚至出现线程请求超时. 后来采用多线程的方式,创建一个连接,后台起100个线程,测试发现跟单线程的效率差不了多少,分析代码后,线程

分享一个入门级可控多线程shell脚本代码_linux shell

说到shell可控多线程,网上分享的大部分是管道控制的方案.这种方案,张戈博客也曾经实战并分享过一次:<Shell+Curl网站健康状态检查脚本,抓出中国博客联盟失联站点>,感兴趣的朋友可以看看. 分享一个入门级可控多线程shell脚本方案 下面张戈博客再分享另一种更容易理解的入门级可控多线程shell脚本方案:任务切割.各个击破. 先来 1 段场景描述: 某日,在鹅厂接到了这个任务,需要在Linux服务器中,对几千个IP进行一次Ping检测,只要取得ping可达的IP就好.如果单个IP去pi

多线程之定时器任务

在java中Timer是java.util包中的一个工具类,提供了定时器的功能.我们可以创建一个Timer对象,然后调用其schedule方法在某个特定的时间去执行一个特定的任务.并且你可以让其以特定频率一直执行某个任务,这个任务是用TimerTask来描述的,我们只需要将要进行的操作写在TimerTask类的run方法中即可.先附上两个小例子一遍让读者了解什么是定时器.接着再分析其中的一些源码实现. 第一个小例子: package com.zkn.newlearn.thread; import

一个Android项目多线程下载模块开源库:AndroidFileDownloader

使用场景 apk应用内更新,其他中小文件的下载,断点续传下载等,先来看看效果图: 简单方便的调用接口 调用者只要设置好下载路径.文件后缀,丢一个url即可开始下载,并且可以根据需要监听进度,例如: FileDownloader mDownloader = FileDownloader.getInstance(getApplication()); mDownloader.setExtend(".apk"); mDownloader.setFilePath(Environment.getE