“调用线程必须是STA,因为许多UI组件都需要这个。” WPF

时间:2012-07-11 19:43:53

标签: c# .net wpf

我遇到InvalidOperationException,消息“调用线程必须是STA,因为许多UI组件都需要这个。”在WPF应用程序中,严重依赖于引用的库。

我试图确定错误的来源,使用各种线程和对象的调度程序,确保main()具有STAthread属性,尝试在看似相关的方法上设置“[STAThread]”。

在MyParticipant构造函数中,正在构建MyVideoRenderer pic,它继承了VideoRenderer,VideoRenderer构造函数本身就抛出了这个异常,而没有进入构造函数。

代码:

public class MyParticipant : Participant           //inside MainWindow.xaml.cs
    {
        public enum PictureMode
        {
            Avatar,
            Video
        }

        public PictureMode pictureMode = PictureMode.Avatar;

        public ProgressBar voiceVolume;
        public Label nameLabel;
        public MyVideoRenderer pic;
        public MyVideo video;

        public bool isCachedInClient = false;   
        public string displayName = null;
        public Image avatarImage = null;

        public static int picHeight = 480;
        public static int piclWidth = 640;
        public static int panelHeight = 155;
        public static int panelWidth = 174;

        public static Color liveColor = SystemColors.GradientActiveCaptionColor;
        public static Color nonLiveColor = SystemColors.GradientInactiveCaptionColor;


        public MyParticipant(uint objectId, VideoManager videoManager)
            : base(objectId, videoManager)
        {
            pic = new MyVideoRenderer(videoManagerRef)   
            {
                //Top = 5,
                //Left = 5,
                Height = picHeight,
                Width = piclWidth,
                //SizeMode = PictureBoxSizeMode.StretchImage
            };
...

public class VideoRenderer : System.Windows.Controls.Image         //referenced external class
{
    public VideoRenderer(VideoManagerRoot videoManager)        ///Exception here
    {
        this.videoManagerRef = videoManager;
    }
...

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:0)

解决了,感谢拉法尔的帖子:

问题在于创建新MyParticipant的线程默认设置为MTA,因此在MyParticipant中,该MTA线程正在调用新的VideoRenderer,后者继承了Image。构建UI控件的MTA线程会导致此异常。

答案 2 :(得分:0)

在(WPF应用程序)项目属性中,确保将启动对象设置为(未设置)。这解决了我的问题。