「多くのUIコンポーネントでSTAが必要なため、呼び出し元のスレッドはSTAである必要があります」というメッセージが表示されたInvalidOperationExceptionが発生しています。参照ライブラリに大きく依存するWPFアプリケーション。
さまざまなスレッドやオブジェクトのディスパッチャーを使用して、エラーの原因を特定し、main()にSTAthread属性があることを確認し、関連性のあるメソッドに「[STAThread]」を設定してみました。
MyParticipantコンストラクター内では、VideoRendererを継承するMyVideoRenderer picが構築されているため、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;
}
...