首页 新闻 会员 周边 捐助

XP系统支持多线程吗?为什么我在win7下可以运行的多线程,在XP下没有效果呢??求解~~~~

0
悬赏园豆:5 [已解决问题] 解决于 2012-04-25 17:13
 /// <summary>
        /// 传入一段信息到语音中读出来
        /// </summary>
        /// <param name="mess">自定义信息</param>
        public void Messagebaohao(string mess) 
        {
            SpeechVoiceSpeakFlags Speak = SpeechVoiceSpeakFlags.SVSFNLPSpeakPunc;
            SpVoice Voice = new SpVoice();
            ThreadPool.QueueUserWorkItem(_ => Voice.Speak(mess, Speak));   //=>新的匿名委托
        }
问题补充:

这是相关代码,单线程的时候XP上可以运行,但是多线程的时候就没有效果!

木木学习的主页 木木学习 | 初学一级 | 园豆:71
提问于:2012-04-24 09:43
< >
分享
最佳答案
0

改成这样试试,理论上应该是可以的。

public void Messagebaohao(string mess) 
{
      SpeechVoiceSpeakFlags Speak = SpeechVoiceSpeakFlags.SVSFNLPSpeakPunc;
      SpVoice Voice = new SpVoice();
      new Thread(() => Voice.Speak(mess, Speak)).Start(); 
}

如果还不可以,建议你把SpVoice类的定义贴出来看看,尤其是它的Speak方法,可能这个方法实现的时候限制了单线程调用。

收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-04-24 09:45

可不可以只给这个方法开一个线程,就是用一个线程去读数据,主线程处理事件,调用这个方法的同时不影响其它的操作就可已了,这样会不会比线程池好用点呢??

木木学习 | 园豆:71 (初学一级) | 2012-04-24 11:03

@木木学习: 可以的。你可以设计一个VoiceManager类,这个类里有个队列,里面是你要传入Speak方法的数据。在其他任何地方你想要读出声音来,只要往这个队列里插入数据就可以了。这是典型的多线程生产,单线程消费的模式。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-24 11:15

@水牛刀刀: 不是太明白~~~~你能不能给我参考下相关的代码呢?

木木学习 | 园豆:71 (初学一级) | 2012-04-24 13:49

@木木学习: 

异常来自 HRESULT:0x80045006


那个线程池的在多次调用的时候会报异常呢~~~

木木学习 | 园豆:71 (初学一级) | 2012-04-24 15:00

@木木学习: 贴SpVoice类的代码

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-24 17:53

@水牛刀刀: 那个貌似可以用循环解决掉,但是不知道怎么去循环!!!

木木学习 | 园豆:71 (初学一级) | 2012-04-25 14:53
其他回答(2)
0

目测是封装了

 SpeechVoice com组件 线程池抛异常正常
喵喵喵猫 | 园豆:1742 (小虾三级) | 2012-04-24 22:51
0

问题解决了么,我也遇到这个问题了,求指教

徐建华 | 园豆:152 (初学一级) | 2012-09-17 14:42

嗯,忘记把第三方控件发给别人了!

支持(0) 反对(0) 木木学习 | 园豆:71 (初学一级) | 2012-09-26 17:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册