我正在创建一个使用Windows窗体作为用户界面的IronPython应用程序。表单是在Dll中构建的,我创建了一个单独的线程来使用Application类的静态方法来运行此表单。这样,表单保持用户响应,而python脚本执行计算和更新表单的控件。
clr.AddReference('MyDialogs');
from MyDialogs import UserRuntimeDialog;
from System.Windows.Forms import Application;
from System.Threading import *;
def threadjob():
global form;
Application.Run(form);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(False)
form = UserRuntimeDialog();
t = Thread(ThreadStart(threadjob));
t.ApartmentState = ApartmentState.STA;
t.IsBackground = True;
t.Start();
根据.Net文档,只有创建控件的线程才能访问和/或修改其内容。这个事实允许我从IronPython中更改表单的属性,例如设置进度条值等等,因为这是创建表单的线程。但是如果我在表单中读取内部的托管线程id (例如通过在表单中显示它),我得到的价值与主Python的线程不同。 所以我的问题是: