有一个窗口,里面通过ThreadPool.QueueUserWorkItem(new WaitCallback(LoadPlayer));
加载多个播放器,然后还加载一个滚动文字的窗口(包含timer线程);而每个播放器又有很多工作,并且还会包含
ThreadPool.QueueUserWorkItem创建的其他子工作线程,当它们运行时,就出现了卡壳的现象,
所以我的问题是在怎么消除卡壳的现象,
特别是在ThreadPool.QueueUserWorkItem创建的其他子工作线程来读写播放列表,切换节目单,分析播放的输出时
加载多个播放器,然后还加载一个滚动文字的窗口(包含timer线程);而每个播放器又有很多工作,并且还会包含
ThreadPool.QueueUserWorkItem创建的其他子工作线程,当它们运行时,就出现了卡壳的现象,
所以我的问题是在怎么消除卡壳的现象,
特别是在ThreadPool.QueueUserWorkItem创建的其他子工作线程来读写播放列表,切换节目单,分析播放的输出时
就像窗口里player1和player2,都用
ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessPls), e);
分别创建新节目单 pls1 和 pls2
来播放,这时会造成滚动文字的窗口timer线程停顿(像是主线程的时间片被抢先占用了),player1和player2从线程池创建的线程又会互相争用主线程的资源似的
{
子线程
}委托线程
delegate void SetVisibleDelegate();
private void uprss()
{
this.BeginInvoke(new SetVisibleDelegate(运行函数));}
......
若要支持多个 UI 线程,
你要做的还有很多,消息泵要独立.
我还没用到消息泵,只是简单的使用ThreadPool.QueueUserWorkItem创建线程,异步的调用做某件事就是主界面form传节目单表数据给播放器form或字幕窗口等子窗口
主界面form。control。add(子窗口)
然后子窗口自己做自己的事,本来想是这种思路
但发现因为子窗口的所有操作还是在主窗口的线程里,所以出现了抢cpu资源,造成程序运行卡的现象如果朋友们有好的思路,多指点下或是举个例,谢谢先!
播放器用MPlayer,降低它的进程优先级,单独运行字幕窗口,不太卡了还是没理解透一点:
ThreadPool.QueueUserWorkItem启动的线程去异步做某一件事情,
AutoResetEvent/ManualResetEvent 或同时使用lock,怎么能够达到线程排队工作的效果;
http://knowledge.swanky.wu.googlepages.com/threading_in_c_sharp.html
看上面的文章依然理解不透!
比如
我要事件按顺序 1,2,3....工作
ThreadPool.QueueUserWorkItem启动却是 2,1,3.....工作
所以想到AutoResetEvent/ManualResetEvent 或同时使用lock
这个讲的不错。