有谁知道为什么这段代码是减慢UI:线程中运行一个沉重的方法是减慢C#中的UI
Thread trdGenerateTrajectory = new Thread(() => HeavyMethod());
trdGenerateTrajectory.Start();
trdGenerateTrajectory.Join();
这应该是比主线程一个单独的线程,我是对?如果是这样,为什么运行它会减慢/冻结UL?
编辑:感谢您的意见。我删除了Join(),但它仍冻结了UI。任何想法?
更新:HeavyMethod()方法从我创建的Matlab dll调用一个方法。 dll中的方法为机器人生成操纵轨迹。我的项目是一个重型机器人项目,可以与很多硬件/设备进行通信。该项目有12名背景工人和一名计时员。计时器负责更新UI和所有文本/颜色/图像/ ...。到目前为止,我对背景工作者和计时器没有任何问题,无论他们正在运行的任务有多重,我从来没有看到任何延迟或停止计时器和UI更新。但是,当我在Matlab dll中调用这个特定的方法时,我看到在更新UI之前看到一个完整的停止,直到方法完成。这是我所经历的:
- 我用线程(上面的代码)没有运气。
- 然后,我将运行方法后的方法和过程移到另一个背景工作器中,再次没有运气。
然后我意识到,我的表单上的一些文本框正在遇到这个问题。他们是那些从相同的Matlab DLL的另一种方法获得他们的价值观。那时我意识到这个问题与线程/背景工作者没有任何关系,并且与Matlab运行方法的方式有关。也许它是单线程的!?无论如何,如果我为这种生成轨迹的特定方法制作单独的dll,可能会有所帮助,所以我创建了另一个dll,但我遇到了完全相同的问题。看起来像Matlab DLL一次只能运行一种方法,不管你是从不同的线程还是从单独的dll调用它们。我相信我应该在单独的SO问题中提出这个问题,而且我会,但同时,你对此有何评论? (更新:我没有收到任何回复,所以我发布了一个新问题:Calling two functions from a single Matlab dll at the same time)
使用您cpusets - 并且是一个多核系统上的代码? –
异步与同步,调度程序线程等等可以帮助您。你创建了一个线程怎么样以及何时运行它。当UI线程运行时会发生什么?是否有进度条正在运行? – Gilad
这是什么类型的程序? Windows窗体? –