我是刚开始学习多线程的,之所以用到多线程是希望加快速度
Class clsA
{
private clsB myClsB;
private bool BigProcess
{
private bool RunResult = myClsB.run();
if (RunResult==True)
{
//Carry on
}
else
{
//Action Termiate
return false;
}
}
}Class clsB
{
public bool Run()
{
//多线程在这里面
}
Private void Thread1()
{
//........
}
Private void Thread2()
{
//....
}
}现在是clsB里面的Run,为了提高效率run里面并行执行几个线程。但是我clsA里面要等待Run所有的线程结束,如果所有线程返回的都是true那么就继续执行,如果其中一个线程返回false那么程序停止 现在不知道怎么写了。求线索谢谢大家
Class clsA
{
private clsB myClsB;
private bool BigProcess
{
private bool RunResult = myClsB.run();
if (RunResult==True)
{
//Carry on
}
else
{
//Action Termiate
return false;
}
}
}Class clsB
{
public bool Run()
{
//多线程在这里面
}
Private void Thread1()
{
//........
}
Private void Thread2()
{
//....
}
}现在是clsB里面的Run,为了提高效率run里面并行执行几个线程。但是我clsA里面要等待Run所有的线程结束,如果所有线程返回的都是true那么就继续执行,如果其中一个线程返回false那么程序停止 现在不知道怎么写了。求线索谢谢大家
解决方案 »
- .net如何调用windowsXP的摄像头拍照功能?
- BindingList<T>的问题
- 帮忙看看这函数是什么意思?
- 测试自己的编程能力,看你几分钟能做出来
- 关于定义泛型的方法(或属性)的问题,谢谢!
- 三行VB代码,请帮忙翻译成C#代码,高分在线等
- c# DataGrid 列重叠显示问题
- 用Graphics类中的MeasureString方法去测量一段多行文字的高度的问题
- 请大家帮忙看下下面的问题(C#中DataGrid)??
- ***如何给textbox添加"Enter"键事件***
- 关于Remoting 通过客户端通过接口远程调用服务器端服务
- 在winform 里如何将sql数据库的某个表和其结构导出到access数据库里,同时创建mdb文件
线程是为了
1充分利用多CPU,
2在等待数据网络访问时后可以不用闲着
// Simultaneously calculate the terms.
ThreadPool.QueueUserWorkItem(
new WaitCallback(CalculateBase));
ThreadPool.QueueUserWorkItem(
new WaitCallback(CalculateFirstTerm));
ThreadPool.QueueUserWorkItem(
new WaitCallback(CalculateSecondTerm));
ThreadPool.QueueUserWorkItem(
new WaitCallback(CalculateThirdTerm)); // Wait for all of the terms to be calculated.
WaitHandle.WaitAll(autoEvents);
-------------------------------------------
推荐的做法是用标记变量 表示状态,默认true 有一个线程为false 就置为了false每个线程中都要轮训判断标记变量 用于判断是否继续执行。还有一种暴力的方法 就是Abort 但是会抛异常 并且会导致资源不被释放。
Form1:public Form1()
{
InitializeComponent();
Form.CheckForIllegalCrossThreadCalls = false;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 wait = new Form2();
ThreadStart start = delegate
{
Thread.Sleep(2000);//在此例子中窗体关闭太快了,所以用这个办法给用户看效果的
//这个地方就是放子线程的内容,或者子线程代码
while (true)
{
if (wait.IsOpen)
{
if (wait.IsHandleCreated)
{
wait.Close();
}
break;
}
}
}; Thread tr = new Thread(start);
tr.Start();
wait.ShowDialog();
}
Form2:
public bool IsOpen;
private void Form2_Load(object sender, EventArgs e)
{
IsOpen = true;
}源码你要是话 q我 号码:823783931