如何在C#中修复ThreadStateException()?

时间:2013-10-02 12:23:40

标签: c# .net multithreading

我有一个应用程序运行一个线程来播放一首或多首歌曲。要创建播放列表,我每隔一个网格更新一次信息。创建播放列表后,如果线程未启动且播放列表大于0,则运行一个线程播放歌曲。 这是我的扫描:

if(!thrPlayMusic.IsAlive && existData)
                thrPlayMusic.Start();

但是,在某些情况下,系统正在生成异常ThreadStateException(),表示该线程已经启动。但他如何抛出此异常,并检查线程是否处于活动状态然后开始处理?有人能帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您需要实现某种lock元素。这将阻止多个线程访问一段代码,并防止像您描述的那样的竞争条件。

将代码重写为

private static object lockObject = new lockObject();

使用上述锁定

lock(lockObject)
{
   if(!thrPlayMusic.IsAlive && existData)
       thrPlayMusic.Start();
}

这将确保锁定块中只有一个线程;任何其他线程进入将等待锁定语句,直到当前线程完成。

注意:如果thrPlayMusic.Start();方法需要很长时间才能返回,则上述方法无效。