0

私はこの質問を読んだことがありますが、 GUI以外のスレッドC#内からフォームを作成する方法は役に立ちませんでした。

プレーヤーのリストを含むテーブルのリストがあり、各プレーヤーには独自のフォームがあります(player.csとplayerform.csで分離しました)

問題は、テーブルをフォームから継承させた場合(フォームを表示し、visible = falseにするため、表示されない)、Methodinvokerを作成できることです。

//table.cs
class Table : Form{

    var player = Players.First();
    this.Invoke(new MethodInvoker(player.ShowForm));

//player.cs
void ShowForm() {
    var form = new PlayerForm();
    form.show();
}

これは問題や副作用なしに機能しています。しかし、少し厄介です。Invokeを使用するためだけに、FormからClassを継承します。(私のテーブルにはフォームは必要ないので、これを修正したい)

フォームがない場合、どうすればinvokeを使用できますか?

ありがとう

4

1 に答える 1

2

非常に説得力のある理由がない限り、UI以外のスレッドでフォームを作成しないことをお勧めします。これを行うと、他のより標準的なアプローチを使用することで回避できる複雑さが生じます。

たとえば、フォームごとにバックグラウンドで処理を実行する場合は、個別のフォームごとにBackgroundWorkerインスタンスを使用できます。

リンク先の質問に示されているように、実行時間の長いプロセスがある場合、そのプロセスはイベントを使用して、標準のUIスレッドを介してフォームを表示するように要求できます。

于 2012-08-07T04:06:09.377 に答える