【发布时间】:2013-07-25 13:08:42
【问题描述】:
我从服务参考收到一些数据。
结构 f.e.如下:
我从服务引用中收到了一些驱动程序数据(命名空间:ServiceReference.Driver)
我的项目中 driverdata 的命名空间是 'MyProject.Driver'。
DriverUserControl 应该在 MyProject.Driver 的构造函数中创建。
public Driver(int id, string name, string telephone, string plate,
Dictionary<DateTime, TransportType> transportTypes, Division division)
{
this.id = id;
this.name = name;
this.telephone = telephone;
this.plate = plate;
this.transportTypes = transportTypes;
this.division = division;
userControl = new DriverUserControl(this);
}
但是当我到达这里时:
public DriverUserControl(Driver magnet)
{
InitializeComponent();
this.magnet = magnet;
Render();
}
每当它到达用户控件的构造函数时,就会出现以下错误“调用线程必须是 STA,因为许多 UI 组件都需要这个”。
因为我从来没有在我的项目中的任何地方启动过线程,所以我不知道应该如何将它设置为 STA。我猜 servicereference 被视为一个线程,但是,有没有办法将其更改为 STA?
谢谢。
【问题讨论】:
-
为什么要在
Driver类中创建用户控件? -
Driver对象在哪里创建? ServiceReference 在这一切中的作用是什么?不清楚。 -
Driver 构造函数在哪个线程上被调用?你需要调试它看它是否是主线程,它的ApartmentState是否是STA,否则你必须手动创建一个STA线程。
标签: wpf multithreading wcf sta