如下,function3中的set执行完毕后,系统会随机执行function1的.WaitOne()或者function2的.WaitOne() ,如果执行的 是 function1的.WaitOne(),则系统将不会有任何输出,会无限制等待开启信号,如果执行的是 function2的.WaitOne()一切正常,按照执行顺序 function3--->function2-->function1我想用AutoResetEvent人为的控制线程的执行顺序(ManualResetEvent方法试过可以),该怎么做呢??
static AutoResetEvent mre = new AutoResetEvent(false);
static AutoResetEvent mre1 = new AutoResetEvent(false);
static void Main(string[] args)
{
funDelegate1();
}
static private void funDelegate1()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(function1));
ThreadPool.QueueUserWorkItem(new WaitCallback(function2));
ThreadPool.QueueUserWorkItem(new WaitCallback(function3));
Console.Read();
}
private static void function1(object funParam)
{
mre.WaitOne();
mre1.WaitOne();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
}
private static void function2(object funParam)
{
mre.WaitOne();
mre1.Set();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
}
private static void function3(object funParam)
{
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
mre.Set();
}
static AutoResetEvent mre = new AutoResetEvent(false);
static AutoResetEvent mre1 = new AutoResetEvent(false);
static void Main(string[] args)
{
funDelegate1();
}
static private void funDelegate1()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(function1));
ThreadPool.QueueUserWorkItem(new WaitCallback(function2));
ThreadPool.QueueUserWorkItem(new WaitCallback(function3));
Console.Read();
}
private static void function1(object funParam)
{
mre.WaitOne();
mre1.WaitOne();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
}
private static void function2(object funParam)
{
mre.WaitOne();
mre1.Set();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
}
private static void function3(object funParam)
{
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
mre.Set();
}
解决方案 »
- 线程、更新控件内容(InvokeRequired)、线程退出(join),好像有BUG
- 怎么让lable控件在另一个控件中移动
- 学生管理系统 要C#和SQL 要学什么啊?
- treeview中节点多的时候显示的问题
- 对打包部署CAB文件熟悉的朋友请进来,解决了的送300分,先送100分,绝不食言
- 关于DataSET 导入Excel的问题,急急,在线等待
- 水晶報表cr9netredist_chs.exe文件可以安裝在裝.net2002 的系統上嗎?
- Socket网络编程疑问,客户端如何在Connect()的时候带上用户Id值
- 关于float类型,很简单!·
- [未定义入口点]是什么意思呀?
- WPF/C# 多线程问题异步调用问题
- RTrim和LTrim,怎么不起作用?SQL小问.
private static void function1(object funParam)
{
mre1.WaitOne();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
}
private static void function2(object funParam)
{
mre.WaitOne();
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
mre1.Set();
}
private static void function3(object funParam)
{
StackTrace st = new StackTrace(true);
Console.WriteLine(st.GetFrame(0).GetMethod().Name);
mre.Set();
}