线程问题,如何让一个对象只能打开一个线程

飞起来一脚 2012-05-08 12:29:37
两个对象t1,t2,执行时间不同,当是t1对象的时候,在当前线程执行Execute方法,当t2对象的时候,因为t2执行慢,需要新开一个线程执行Execute方法,但是按照目前的程序,可能会有多个线程同时执行t2的excute方法,想寻找一种方法能够控制住,如果t2的excute在执行,就不要创建这个线程了,等执行完毕,在主线程中在开启新线程去执行,既每个线程对应到对象上。

using System;
using System.Threading;

namespace 一个对象一个线程
{
class Program
{
static void Main(string[] args)
{
var t1 = new MyClass {WaitTime = 1000};
var t2 = new MyClass { WaitTime = 6000 };
int i = 0;

while (true)
{
var curr=new MyClass();
if (i++ % 2 == 0)
{
Execute(t1);
}
else
{
curr = t2;
var thread = new Thread(new ParameterizedThreadStart(Execute));
Console.WriteLine("开始新线程id:" + thread.ManagedThreadId);
thread.Start(t2);
}
Thread.Sleep(1000);
}
}

static void Execute(object obj)
{
var me = (MyClass) obj;
if (me.WaitTime == 1000)
{
Console.WriteLine("开始执行");
Thread.Sleep(me.WaitTime);
Console.WriteLine("执行完毕");
}
else
{
{
Console.WriteLine("-------------------开始执行");
Thread.Sleep(me.WaitTime);
Console.WriteLine("-------------------执行完毕");
}
}
}
}

class MyClass
{
public int WaitTime { get; set; }
}
}
...全文
136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2012-05-08
  • 打赏
  • 举报
回复

static void Main(string[] args)
{
var t1 = new MyClass {WaitTime = 1000};
var t2 = new MyClass { WaitTime = 6000 };
int i = 0;

while (true)
{
var curr=new MyClass();
if (i++ % 2 == 0)
{
Execute(t1);
}
else
{
curr = t2;
if (!curr.IsRun)
{
var thread = new Thread(new ParameterizedThreadStart(Execute));
Console.WriteLine("开始新线程id:" + thread.ManagedThreadId);
thread.Start(t2);
}
}
Thread.Sleep(1000);
}
}

static void Execute(object obj)
{
var me = (MyClass) obj;
me.IsRun = true;
if (me.WaitTime == 1000)
{
Console.WriteLine("开始执行");
Thread.Sleep(me.WaitTime);
Console.WriteLine("执行完毕");
}
else
{
{
Console.WriteLine("-------------------开始执行");
Thread.Sleep(me.WaitTime);
Console.WriteLine("-------------------执行完毕");
}
}
me.IsRun = false;
}
}

class MyClass
{
public int WaitTime { get; set; }
private bool _isrun = false;
public bool IsRun
{
get { return this._isrun; }
set { this._isrun = value; }

}
}
飞起来一脚 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

加个标识不就完事了
[/Quote]
不太明白,请说详细些
cheng2005 2012-05-08
  • 打赏
  • 举报
回复
加个标识不就完事了

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧