C#中的多线程问题用于什么地方?怎么掌握?

如题所述

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

2.当线程Sleep时,系统就退出执行队列一段时间,当睡眠结束时,系统会产生一个时钟中断,从而
使线程回到执行队列中,从而恢复线程的执行。

3.如果父线程先于子线程结束,那么子线程将在父线程结束的同时被迫结束。Thread.Join()方法使父线程等待,直到子线程结束。
Abort()方法带来的后果是不可恢复的终止线程。

4.起始线程可以称之为主线程,如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条件终止。
后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,CLR
将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。

6.挂起,睡眠(都可称为--阻塞,暂停)
与Thread.Sleep 不同,Thread.Suspend 不会使线程立即停止执行。直到线程到达安全点之后它才可以将该线程挂起。如果线程尚
未启动或已经停止,则它将不能挂起。调用 Thread.Resume 将使另一个线程跳出挂起状态并使该线程继续执行。
一个线程不能对另一个线程调用Sleep ,但是一个线程可以对另一个线程调用Suspend。
还可以使用许多其它的方式来阻塞线程。例如,可以通过调用 Thread.Join 使一个线程等待另一个线程(子线程)停止。使用
Monitor.Wait使一个线程等待访问一个同步对象。

5.关键字lock可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。
多线程公用一个对象时,就不应该使用lock关键字了,这里Monitor,Monitor提供了使线程共享资源的方案。
Monitor类可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。
如:
Monitor.Enter(obj);
//现在oQueue对象只能被当前线程操纵了
Monitor.Exit(obj);

6.一个进程开始时至少会有一个主线程 ( 即主执行实例 ) ,这是在系统加载你的程序的时候所创建的主执行流程。
而消息队列则是与线程 ( Thread ) 相关的,在似win2k上一个线程有一个且只有一个消息队列 ( queue ) 与之相对应。
消息队列是在什么时候生成的呢? 在似win2k系统上,从一开始创建线程就已经有了。
一个线程可以创建多个窗体。统发送给这些窗口的消息都统一发送到同一个 消息队列 中,幸亏消息结构中有msg.hwnd指出该条消息与
哪一个窗口相关, DispatchMessage() 函数就是依照这个保证消息分派处理自动化而且不会出错!

7.每个窗体都属于创建它的线程,在一线程中直接访或间接问其它线程中的窗体的方法将导致运行时错误(VS2005)。
解决方法:使用窗体从Control继承而来的Control.Invoke(Delegate)方法。该方法将在创建窗体的线程上执行委托指向的方法。
注意:在VS2003下,可以在一个线程中直接或间接调用另一个线程中的窗体的方法,而不会导致运行时错误。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-14
多线程可以在某些情况下提高程序的运行效率,加快运行速度。有时候需要在同一时间同时运行,比如游戏里跑动的同时还可以射击还可以播放音乐,这是就需要采用多线程。多练习就可以掌握拉

C#中的多线程问题用于什么地方?怎么掌握?
1.每个窗体都有自己的都在不同的线程上运行,如果需要在窗体之间交互,就需要在线程之间交互。2.当线程Sleep时,系统就退出执行队列一段时间,当睡眠结束时,系统会产生一个时钟中断,从而 使线程回到执行队列中,从而恢复线程的执行。3.如果父线程先于子线程结束,那么子线程将在父线程结束的同时被迫结...

C#开发中什么时候用异步,什么时候用多线程?具体说明一下,谢谢_百度知 ...
异步多出现在通信软件中,用于接收和发送数据,当然多线程也可以实现,多线程一般用在同时执行后台数据处理和用户界面的更新的时候!

C#线程到底有什么用途?
对于asp.net里面基本上用不到多线程,唯一用的地方就是websevice,还有就是结合消息机制,实现异步操作.

C#开发中什么时候用异步,什么时候用多线程?具体说明一下,谢谢_百度知 ...
多线程是用来解决单线程阻塞的,也可以适当提升性能 一个线程一旦被占用,它就要等到占用释放后才能进行其它操作,如一个winform程序按钮出发了数据导入操作,大量数据在后台运算,这时窗体就会呈现假死状态,如果使用新线程去执行数据导入,桌面程序就不会呈现假死状态了。

在C#中怎样运用多线程[MTAThread]
首先不是为了多线程而多线程,多线程会极大的带来额外的出错的几率。C#中第一个打开窗口的线程是主线程,也是处理UI的线程,最好保持这个线程通畅,即不要有阻塞操作,如Thread.Sleep(10);等这样是不好的。耗时的线程需要打开新的线程来操作,而且最好把IsBackground属性设为True。这样在所有前台线程...

C#多线程问题
一、局域网模式 1、服务器启动监听端口;2、客户端向服务发出连接请求,同时创建一个随机监听端口,并进行监听;3、服务器接收到连接请求后创建一个连接,进行基本消息验证,验证通过,读取消息协议中客户端的IP和随机端口,向客户端发出连接请求,同时释放服务器端监听创建的连接,以便处理下一个监听;4、...

C#大数据量问题
多线程处理解决了吞吐量和响应性的问题,但同时也带来了资源共享问题,如死锁和争用状态。多线程特别适用于需要不同资源(如文件句柄和网络连接)的任务。为单个资源分配多个线程可能会导致同步问题,线程会被频繁阻止以等待其他线程,从而与使用多线程的初衷背道而驰。常见的策略是使用辅助线程执行不需要...

C#中的多线程超时处理实践
最近处理C#中timeout行为的bug,解决方案涉及多线程超时处理。首先,创建了一个类来处理超时操作。定义了`OperationHandler`类,包含`IOperation`接口实例和`StartWithTimeout`方法,用于在超时后执行操作,以及`StopOperationIfNotStartedYet`方法,用于在超时期间停止操作。接着,实现了一个操作类`MyOperation...

初学C#,现有 多线程处理数据问题: 有1000条记录,每条记录都要这样处理...
额,对于你的问题我只能这么说,使用多线程不但不会提升处理速度,而且会降低数据处理速度!记住,是一定会降低处理速度!你要明白多线程的作用是异步处理,而不是提高速度(哪怕你的cpu是一万核的也白搭,那只能说明你电脑的处理性能很高),因为所谓多线程其实是“伪线程”,创建越多的线程,则会越多...

c# 多线程的小问题
多线程可以有效的并发。对于包含不同任务的程序,可以考虑每个任务使用一个线程。这样的程序在设计上相对于单线程做所有事的程序来说,更为清晰明了,比如生产、消费者问题。在实际的开发中对于性能优化的问题需要考虑到具体的场景来考虑是否使用多线程技术。也就是说线程和效率不是成正比对应的 ...

相似回答