前提・実現したいこと
C#で、対戦型カードゲームの作成を行っています。
Unityは使用せず、VisualStudio2019で作成しています。
ユーザが対戦用の部屋を作成した状態で、その部屋に入室したユーザへ、サーバがゲームのルール等をまとめたクラスをシリアライズして送信する機能を実装しています。
ユーザがゲームのルールを受け取り、デシリアライズまで行えているのですが、受信したゲームのルールをComboBoxのDataSourceプロパティに設定する際に例外が発生してしまいます。
ComboBoxへのゲームルールの紐づけはできているようで、画面の操作を行っても、意図したとおりに動いているようですが、なぜ例外が発生するのかが分かりません。
また、サーバからのゲームルールの受信を別スレッドで行っているためか、以下のコードに示すような例外の補足方法では例外が補足できず、詳しい状況が分かりません。
この状況について、何が起こっているかや、例外の補足の方法などを教えていただきたいです。
他に足りない情報などがあれば教えてください。
発生している問題・エラーメッセージ
例外がスローされました: 'System.ArgumentException' (System.Windows.Forms.dll の中)
該当のソースコード
ComboBoxにDataSourceを設定する部分のコード
C#
1internal void GameRuleInfoSet(List<GameRuleClass> gameRuleList, object control) 2{ 3 if (control is ComboBox) 4 { 5 var tempControl = control as ComboBox; 6 if (tempControl.InvokeRequired) 7 { 8 var d = new ReceiveGameRuleInfo(GameRuleInfoSet); 9 tempControl.Invoke(d, new object[] { gameRuleList, tempControl }); 10 } 11 else 12 { 13 try 14 { 15 gameRuleListBindingSource.DataSource = gameRuleList; 16 //↓この行で例外が発生する 17 tempControl.DataSource = gameRuleListBindingSource; 18 //↑この行で例外が発生する 19 tempControl.DisplayMember = "GameRuleText"; 20 tempControl.ValueMember = "GameRule"; 21 } 22 catch(Exception e) 23 { 24 //このようにtry-catchを書いても補足されない 25 Console.WriteLine(e); 26 } 27 } 28 } 29}
ComboBoxへDataSourceとして設定しているGameRuleClass
C#
1public class GameRuleClass 2{ 3 [DataMember] 4 public string GameRuleText { get; set; } 5 6 [DataMember] 7 public GameRule GameRule { get; set; } 8 //enum値 9 10 [DataMember] 11 public CardsClass UsingCards { get; set; } 12 //ゲームで使用するCardクラスのリスト、List<Card>を継承したクラス 13}
試したこと
例外の補足のために、try-catch文を挿入してみたが、例外が補足されないため、詳しいエラーの内容が分からず、なぜ例外が発生しているかが不明
(追記)
プログラム上で作成しているListを使用せず、List<GameRuleClass>とList<Card>の内容をコード上に直書きして実行したが、同様の場所で同様の例外が発生する。
VisualStudioのデバッグのステップ実行で、ComboBoxのDataSourceに値を設定する直前の行
gameRuleListBindingSource.DataSource = gameRuleList;
のgameRuleListの内容を確認したが、想定通りの値が入っている。
補足情報(FW/ツールのバージョンなど)
VisualStudio2019
.Net 5.0
(追記)
Windowsフォームアプリケーション
回答1件
あなたの回答
tips
プレビュー