IronPython主题中的C#表单。它运行在哪个线程?

时间:2017-08-02 07:53:46

标签: c# multithreading winforms ironpython

我正在创建一个使用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的线程不同。 所以我的问题是:

  1. 为什么表单看到不同的线程ID?
  2. 这是一种表格 - Python交互的安全设计吗?

0 个答案:

没有答案