我的项目有两个使用System.Timer的线程
Thread t1, t2;
t1 = new Thread(Timer_product);
t2 = new Thread(Timer_money);
t1.Start();
t2.Start();
当我运行应用程序时,它始终从t1开始,但不会启动t2。
如果我将订单更改为
t2.Start();
t1.Start();
再次运行我的应用程序,t1不启动,但t2启动。
答案 0 :(得分:0)
线程执行的顺序并不重要,如下所示。我怀疑你的问题在于 Timer_money 或可能是 Timer_product 。
示例:
void Main()
{
Thread t1, t2;
t1 = new Thread(t => { Console.WriteLine("T1 is running");});
t2 = new Thread(t => { Console.WriteLine("T2 is running");});
t1.Start();
t2.Start();
}
结果:
T1正在运行
T2正在运行
现在是相同的线程,但执行顺序相反。
void Main()
{
Thread t1, t2;
t1 = new Thread(t => { Console.WriteLine("T1 is running");});
t2 = new Thread(t => { Console.WriteLine("T2 is running");});
t2.Start();
t1.Start();
}
结果:
T2正在运行
T1正在运行
答案 1 :(得分:0)
使用计时器时根本不需要线程,因为计时器已经使用了它自己的线程。 Take a look at code。
因此,如果您使用两个不同的计时器,则可能需要线程同步。查看我的answer how to synchronize threads
答案 2 :(得分:-3)
如何使用Parallel.Invoke()?
Parallel.Invoke(Timer_product, Timer_money);
如果这两项都不起作用,问题应该在Timer_product或Timer_money中。它会帮助你找出问题所在。
答案 3 :(得分:-4)
Parallel.Invoke方法提供了一种同时运行任意数量的任意语句的便捷方法。只需为每个工作项传递一个Action委托。创建这些委托的最简单方法是使用lambda表达式。
以下示例显示了一个基本的Invoke调用,该调用创建并启动两个并发运行的任务。第一个任务由调用名为DoSomeWork
的方法的lambda表达式表示,第二个任务由调用名为DoSomeOtherWork.
的方法的lambda表达式表示
Parallel.Invoke(() => DoSomeWork(), () => DoSomeOtherWork());