2012-07-11 46 views
1

我遇到了InvalidOperationException異常,消息是「調用的線程必須是STA,因爲很多UI組件都需要這個。」在一個WPF應用程序中,很大程度上依賴於引用的庫。「調用線程必須是STA,因爲很多UI組件都需要這個。」 WPF

我試圖確定錯誤來自哪裏,使用各種線程和對象的調度程序,確保main()具有STAthread屬性,嘗試在看起來相關的方法上設置「[STAThread]」。

在MyParticipant構造函數中,由於正在構造MyVideoRenderer圖片,它繼承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; 
    } 
... 
+1

你的問題是? – 2012-07-11 19:56:58

+3

這段代碼可能運行的線程完全不清楚。然而,該例外強烈表明它不在顯示UI的主線程上。 – 2012-07-11 20:49:36

回答

0

解決了,感謝拉法爾的帖子:

的問題是,這是創建一個新的MyParticipant的線程已被默認設置爲MTA,所以在MyParticipant中,MTA線程正在調用新的VideoRenderer,它繼承了Image。構造UI控件的MTA線程導致此異常。

+0

爲什麼這仍然不固定? – user99999991 2014-03-03 22:36:10

8

我的猜測是,你正在創建從後臺線程,這是異常的原因UI元素。

閱讀:

+0

謝謝你,拉法爾。 第一個鏈接幫助瞭解了這個問題: 創建新MyParticipant的線程被默認設置爲MTA,因此在MyParticipant中,MTA線程調用了新的VideoRenderer,它繼承了Image。 構建UI控件的MTA線程導致此異常。 – user1518816 2012-07-12 14:34:04

0

在(WPF應用程序)項目屬性中確保啓動對象設置爲(未設置)。這解決了我的情況。

相關問題