【发布时间】:2010-08-04 03:23:26
【问题描述】:
所以我使用 C# 在 Visual Studio 中制作了一个 Winforms GUI,但是对于我正在处理的项目,我希望大部分代码都用 Python 编写。我希望用python(为了可移植性)编写“引擎”,然后让应用程序接口成为我可以换掉的东西。
我将 C# 项目编译为 .dll,并且能够将类导入 IronPython 脚本并正常启动 GUI。
问题是运行 GUI 会停止 Python 脚本的执行,除非我将它放入单独的线程中。但是,如果我将 GUI 放入一个单独的线程并尝试使用原始 python 线程来更改状态信息,我会收到一个异常,即从与创建控件不同的线程修改控件。
有什么好的方法可以与 GUI 线程进行通信或完成我想要做的事情吗?
GUI的C#驱动:
public class Program
{
private static MainWindow window;
[STAThread]
static void Main()
{
Program.RunGUI();
}
public static void RunGUI()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
window = new MainWindow();
Application.Run(window);
}
public static void SetState(GameState state)
{
window.State = state;
}
}
还有python脚本:
import clr
clr.AddReferenceToFile("TG.Model.dll")
clr.AddReferenceToFile("TG.UI.dll")
from TG.Model import GameState
from TG.UI import Program
import thread
import time
def main():
print "Hello!"
state = GameState()
print state.CharacterName
print dir(Program)
thread.start_new_thread(Program.RunGUI, ())
#Program.RunGUI()
time.sleep(2)
Program.SetState(state)
raw_input()
if __name__ == "__main__":
main()
【问题讨论】:
标签: c# python winforms ironpython