我有一个控制音频硬件的WPF应用程序。它在多个线程上使用相同的PythonEngine。这导致奇怪的错误,我不时看到PythonEngines Globals字典缺少值的地方。我正在寻找一些关于如何调试/修复这个问题的指导。C#在多线程上运行IronPython
该设备有多个组件[过滤器,增益等]。每个组件都有多个控件[滑块,切换按钮等]。
每次用户更改控制值时,都需要运行python脚本(来自硬件供应商)。我正在使用IronPython 1.1.2(PythonEngine.Execute(code))来执行此操作。
每个组件都有一个脚本。每个脚本都需要运行所有控件(该组件)的当前值。
序列为 - 用户更改>运行组件脚本>将结果发送到设备>检查响应是否失败。整个循环花费很长时间来保持UI等待,所以每次改变时我都会做一些类似component.begininvoke(startcycle)的事情。
Startcycle看起来是这样的 -
PyEngine Engine = PyEngine.GetInstance(); // this is a singleton
lock(component) // this prevents diff controls of the same component from walking over each other
{
Engine.runcode(...)
}
当不同 component.begininvokes发生接近对方有哪里engine.runcode是在不同的线程在同一时间发生的机会。它看起来像我需要摆脱component.begininvoke,但这会让事情抓取。有任何想法吗?
您在一年前发布了此消息,但我正在研究类似问题的解决方案。你最终得到它的工作?我在想,这不是同时访问引起问题的引擎,但可能需要为每个线程创建一个单独的ScriptScope。我很想知道你是如何解决你的问题的。 – Dave 2010-11-10 14:50:01