C#怎么开辟多线程,要是多了是否会出错,出错了怎么办?

如题所述

首先开辟线程需要使用命名空间System.Threading。
//应用程序主入口
[STAThread]
static void Main(string[] args)
{
//先要创建线程
Thread threadOne = new Thread(new ThreadStart(MethodOne));
//同理创建threadTwo、threadThree多个线程
//启动线程
threadOne.Start();
//主线程的具体执行代码
......
}
//threadOne的执行代码
public static void MethodOne()
{
......
}
//同理可有多个线程的执行代码

开辟多线程的方法如上。

而至于多线程可能产生的错误,最有可能的原因是多线程对公共资源的同时访问导致的错误。为了解决这个问题,可以使用加锁、监视器、互斥体等方法,可避免多线程对公共资源同时访问产生的问题。
加锁:
lock(expression(加锁对象)){statement block(正在访问共享资源的程序段)}
如此可保证多线程对公共资源实行互斥访问。
监视器和互斥体的功能类似,使用方法略复杂一些,可以在CSDN上找详细的用法。基本的互斥操作使用lock就足够了。
希望对你有用。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-07-29
System.Threading.Thread HangUpthread = new Thread(new ParameterizedThreadStart(OnHangUp));
HangUpthread.Start();
//线程OnHangUp
public void OnHangUp()
{

}
程序退出的时候一定要退出所有线程,要不会出错或者当前程序的进程还在!线程里所有的数据刷新界面的时候会出现错误,必须用委托的方式才能把这个数据刷新界面!
第2个回答  2008-07-29
怎么运行线程的话,这不是一两句话就能说清楚的,我就不多说了,MSDN中很多例子。
至于线程多了就容易出错的问题,就看你怎么控制了,如果控制得好的话,在硬件能够承受的范围内,可以创建无数个线程。

建议你在网上搜些教程,然后自己多写几段程序,在写的过程中会碰到一些问题,然后再针对具体的问题自己去找答案,这样才会记得 写多了自然就熟了 呵呵
第3个回答  2008-07-30
Thread thread = new Thread();
//开辟个线程
如果是同一个方法 在没返回前是有可能资源冲突的

锁定方法资源 解决冲突问题本回答被提问者采纳
第4个回答  2008-07-29
using System;
using System.Threading;

public class Test
{
static void Main()
{
ThreadStart job = new ThreadStart(ThreadJob);
Thread thread = new Thread(job);
thread.Start();

for (int i=0; i < 5; i++)
{
Console.WriteLine ("Main thread: {0}", i);
Thread.Sleep(1000);
}
}

static void ThreadJob()
{
for (int i=0; i < 10; i++)
{
Console.WriteLine ("Other thread: {0}", i);
Thread.Sleep(500);
}
}
}

C#怎么开辟多线程,要是多了是否会出错,出错了怎么办?
而至于多线程可能产生的错误,最有可能的原因是多线程对公共资源的同时访问导致的错误。为了解决这个问题,可以使用加锁、监视器、互斥体等方法,可避免多线程对公共资源同时访问产生的问题。加锁:lock(expression(加锁对象)){statement block(正在访问共享资源的程序段)} 如此可保证多线程对公共资源实行...

C#程序中如何启用多进程?
一个程序可以开启多个进程,但是让每个进程都要包含多个线程这个就有扯蛋了,你不能决定你要启动的程序里面是否有多线程的代码、要么这些程序都是你自己个写的,但是就算是你自个写的,也是在编译的时候决定了这个程序是否应用了多线程,而不是由启动程序去决定;下面是利用多线程开启进程的代码,你参考下...

多线程保存文件报错c#
如果两个线程试图在同一时间写入文件的相同部分,会导致数据损坏或者写入的数据不完整。为了解决这个问题,可以使用文件锁(FileLock)来确保在给定时间内只有一个线程可以写入文件。2、文件访问冲突:当多个线程试图同时写入同一个文件时,会出现竞争条件。如果两个线程试图在同一时间写入文件的相同部分,会导...

c# 创建多线程失败
如果要通过线程更改UI,需要使用invoke来做 1.在Form里写一个更改UI的函数 2.声明一个代理,这个代理可以代理这个更改UI的函数 3.函数内部 if(this.label4.invokerequied)\/\/判断是否需要invoke操作 { \/\/实例化此函数自身的代理 \/\/如果此函数有参数,需要创建一个数组,按参数数量和顺序存放参数 \/\/...

C# 多线程数据混乱的问题
多线程操作中,各个线程如果是同时运行的话,他们的执行先后顺序是不确定的,多线程就这样,即使它偶然出现了跟你预期的顺序一样,那也只是巧合罢了 而且你多线程里有都是用了textBox1这个资源,他们会抢用,按理说你应该在各个线程中先把这个资源锁住,用完了以后再释放 ...

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

C#多线程写数据库
首先对数据库(尤其是Access)使用多线程大多不会提高效率(除非SQL中有耗时但不好资源的操作,如T-SQL中休眠之类的语句)。建议楼主:使用队列,将要执行的SQL语句放入队列中(如:System.Collection.Queue或ArrayList),然后用一根线程一条一条执行,另外Access不支持事物回滚只有自己想办法实现了。滥用多...

c#编写了一个多线程程序但是出现40个线程同时运行就自动关闭程序但如果...
楼上正解,不过也可以自己写个线程池来管理和调度你的线程,你这种情况就是一下子运行太多线程的过,可以让线程以队列的形式一个一个执行,并发最好不要太多,CLR有线程管理和控制机制的,不能无限制的并发线程。

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

C#winform使用了多线程,有时候程序再运行中直接就退出了!
直接退出是你的程序后台出现错误或是触发了异常所致,鉴于你同时用了timer和线程去刷新listView数据,可能是你创建线程刷新数据那里出错了~这个需要具体调试,但是我想说的是你的线程和timer 做的是同一件事情,timer本身就是实时去检测并刷新listView数据源的,socket无非是在接受到消息时刷新而已不是实时...

相似回答
大家正在搜