C#关于线程问题

问题描述

小弟刚学C#,对于线程不是很理解,其中对一些数据的采集和实时更新UI界面(在datarecevie中如果一边接收数据一边处理会出问题)请大侠好好普及下这方面知识,最好举些简单的例子。

解决方案

解决方案二:
不用线程,用C#的委托1、委托程序privatevoidWriteLog(stringcontent){//内容自己写}2、委托手柄delegatevoidWriteLogHandle(stringcontent);3、委托使用方法this.Invoke(newWriteLogHandle(WriteLog),newobject[]{"开始监控"});
解决方案三:
线程+队列。可以去msdn上找定义或者例子
解决方案四:
线程中操作UI用委托
解决方案五:
多线程,在早期的操作系统是没有的,比如dos时代,只有一个进程。线程、进程是怎么回事?操作系统,是个最大的进程。比如Win7、XP,是通过硬件的固定引导扇区,加载启动,启动了Win7的第一个进程,这个进程如同女娲。然后,女娲造人一样,一个接着一个的创造出了其他进程。我们的代码,最终编译成为二进制文件,存放在磁盘的固定位置上。当我们双击鼠标时,向女娲报告,请求启动我们的程序,女娲同意,就会分出一个cpu时间片,启动我们的程序。这个启动者,是女娲手下的重臣(OS中的一个系统进程,负责掌控CPU时间片的分配),就是我们的主线程源头。因此,我们的进程启动,首先诞生的是主线程,主线程存在了,进程才算启动。进程是什么?女娲给我们的:内存空间、系统句柄、全局资源等等,放在一个内存空间里面(如同储物柜一样)。操作系统,这样的储物柜有上千万个,我们的所有操作,读取磁盘文件、打开声卡、读取网卡,都是在我们的柜子里面做,不许跑到其他柜子里,如何跑进去,这是黑客们感兴趣的话题。因此,我们可以简单理解:进程包含了一个放杂货的柜子,还有柜子里面的到处乱跑的线程。可以有多少个线程?以前的系统上限是1024个,目前的系统还不清楚。C#中,只有主线程允许访问窗口控件,窗口消息,其他线程是不允许访问的(特殊方法也可以访问,但微软不建议这么作,会有安全隐患)。因此,我们一般是用主线程访问UI操作,辅助线程做耗时操作(比如:数据库操作、耗时算法操作等)。
解决方案六:
多线程操作,是十分复杂的操作,一般是不采用多线程操作的,原因是,无序、混乱、同步艰难、状态锁难以维护、容器(List、Dic、Array等)难以维护。所以,我们看MSDN中的代码,经常可以看到,这个类不是线程安全的。这也需要我们写代码时,要报线程方案放在最后,能不用就不用。
解决方案七:
你对线程不是很了解。。我给你简单的说说吧。希望能帮到你。首先要了解单线程,所谓的单线程就比如:我开了一家组装车间,是流水线生产,车间1的工作完成了,车间2在开始完成,然后车间3.按照顺序。而多线程,在车间1生产的同时,车间2也会生产,不会等到车间1生产完毕他才生产。车间3同理。希望能帮助到你。
解决方案八:
委托,UI不用写太多操作,不然会卡死……

时间: 2024-11-03 17:47:41

C#关于线程问题的相关文章

新人一枚,请问怎样从B线程调用A线程的内容?

问题描述 新人一枚,请问怎样从B线程调用A线程的内容? 具体要求:写一个线程A,得到0-10的随机数,再写一个线程B来了调用线程A!!!!! 解决方案 int a;//全局变量,如果多个线程同步访问需要加锁 A...//线程A B...//线程B 代码结构大致如上,访问的时候,因为变量a是全局数据,所以在线程A和B中都可以直接访问,就好像C中的任何函数都可以访问和使用全局变量一样 解决方案二: 放是全局变量来交换数据

并发集合(三)使用阻塞线程安全的列表

使用阻塞线程安全的列表 列表(list)是最基本的集合.一个列表中的元素数量是不确定的,并且你可以添加.读取和删除任意位置上的元素.并发列表允许不同的线程在同一时刻对列表里的元素进行添加或删除,而不会产生任何数据不一致的问题. 在这个指南中,你将学习如何在你的并发应用程序中使用阻塞的列表.阻塞列表与非阻塞列表的主要区别是,阻塞列表有添加和删除元素的方法,如果由于列表已满或为空而导致这些操作不能立即进行,它们将阻塞调用的线程,直到这些操作可以进行.Java包含实现阻塞列表的LinkedBlocki

[转载]Linux 线程实现机制分析

  自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的.   一.基础知识:线程和进程 按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位.在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开

你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

原文:你真的了解:IIS连接数.IIS并发连接数.IIS最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数 吗? IIS连接数   一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫"IIS限制连接数" 这边客户请求的连接内容包括: 1.网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求

我的代码是怎么进入死循环的,为什么有两个线程运行一会就唤不醒了

问题描述 classResource{privateStringname;privateintcount=1;privatebooleanflag=false;publicsynchronizedvoidset(Stringname){while(flag){notify();try{wait();}catch(InterruptedExceptione){}System.out.println(Thread.currentThread().getName()+"....循环唤醒..."

线程基础之JAVA和C++0x的特性

译文连接   译文地址  译者:衣着时   校对:丁一    (有兴趣参与试译或校对的同学,请加入并发网试译者QQ群:369468545) JAVA特性 JAVA线程通常是一个带有run()方法的java.lang.Thread的子类,然后调用这个子类对象的start()方法.我们之前定义过,数据竞争是因为两个线程同时访问内存单元,在JAVA中,内存单元是一个对象字段或数组元素. 由于JAVA旨在支持运行不受信任代码作为受信任的应用程序的一部分,必须限制不受信任代码的数据争用造成的破坏.因此不允

ios-在背景线程中处理数据

问题描述 在背景线程中处理数据 我写了一方法如下: - (BOOL)shouldDoSomeWork { BOOL result = // here I need do hard work with data in background thread and return result so main thread should wait until the data is calculated and then return result; return result;} 如何实现? 解决方案

线程同步 卖票问题 三个车站卖七张票

问题描述 线程同步 卖票问题 三个车站卖七张票 正确的写法:public class mainclass { public static void main(String[] args) { Train A=new Train(); Train B=new Train(); Train C=new Train(); A.start(); B.start(); C.start(); } } class Train extends Thread{ public static int ticket=7

在非UI线程处理Bitmap

http://my.oschina.net/ryanhoo/blog/88344 译者:Ryan Hoo 来源:https://developer.android.com/develop/index.html 译者按: 在Google最新的文档中,提供了一系列含金量相当高的教程.因为种种原因而鲜为人知,真是可惜!Ryan将会细心整理,将之翻译成中文,希望对开发者有所帮助.         本系列是Google关于展示大Bitmap(位图)的官方演示,可以有效的解决内存限制,更加有效的加载并显示图

基本线程同步(四)在同步代码中使用条件

在同步代码中使用条件 在并发编程中的一个经典问题是生产者与消费者问题,我们有一个数据缓冲区,一个或多个数据的生产者在缓冲区存储数据,而一个或多个数据的消费者,把数据从缓冲区取出. 由于缓冲区是一个共享的数据结构,我们必须采用同步机制,比如synchronized关键字来控制对它的访问.但是我们有更多的限制因素,如果缓冲区是满的,生产者不能存储数据,如果缓冲区是空的,消费者不能取出数据. 对于这些类型的情况,Java在Object对象中提供wait(),notify(),和notifyAll()