Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IronPython中的C#形式';s线。它运行在哪个线程上?_C#_Multithreading_Winforms_Ironpython - Fatal编程技术网

IronPython中的C#形式';s线。它运行在哪个线程上?

IronPython中的C#形式';s线。它运行在哪个线程上?,c#,multithreading,winforms,ironpython,C#,Multithreading,Winforms,Ironpython,我正在创建一个IronPython应用程序,它使用Windows窗体作为用户界面。表单是在Dll中构建的,我创建了一个单独的线程来使用应用程序类的静态方法运行该表单。这样,当python脚本执行计算和更新表单控件时,表单保持对用户的响应 clr.AddReference('MyDialogs'); from MyDialogs import UserRuntimeDialog; from System.Windows.Forms import Application; from System.T

我正在创建一个IronPython应用程序,它使用Windows窗体作为用户界面。表单是在Dll中构建的,我创建了一个单独的线程来使用应用程序类的静态方法运行该表单。这样,当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的线程不同。 因此,我的问题是:

  • 为什么窗体会看到不同的线程id
  • 它是一种安全的表单Python交互设计吗