2

入力テキスト ボックス、ボタン、および複数行の出力テキスト ボックスを備えた WinForms アプリがあります。テキスト ボックスにルート パスが入力されます。ボタンをクリックすると、すべてのサブディレクトリを再帰的にチェックして、適切なディレクトリ名の検証チェックを行う関数が呼び出されます。結果は複数行のテキスト ボックスに出力されます。

再帰的な作業が別のクラスで行われる場合、次の 2 つのオプションがあります。

  1. クラス プロパティ (ArrayList など) で不適切なディレクトリを追跡し、完了したら ArrayList を返し、すべての結果で出力テキスト ボックスを更新します。

  2. 出力テキスト ボックスを ByRef に渡し、不適切なディレクトリごとに更新/更新します。1 と 2 はシングル スレッドですが、2 を使用すると、少なくともディレクトリごとに結果が更新されます。

再帰的な作業がプレゼンテーション層で行われ、検証が別のクラスで行われる場合、マルチスレッド化できます。

よりクリーンな方法はどれですか?

4

3 に答える 3

2

TextBox ByRef を渡す必要はありません。それはすでに参照オブジェクトです。ByRef を渡すと、別のまたは新しい TextBox を参照に割り当てる予定がある場合にのみ効果があります。

List<string>別のクラスで作業を行う場合、TextBox の内容を文字列として渡し、結果を文字列または文字列のセット (配列など)として返すのと同じくらい簡単に思えます。. これは、いつか別の種類のコントロールを使用してこの情報を格納することにした場合に備えて、TextBox を渡すよりも優れています。

于 2008-10-24T15:15:43.840 に答える
2

オプション1に近いものを提案します。ルートディレクトリを入力として受け取り、「悪い」ディレクトリのリストを返すメソッドがあります。また、操作の実行中に UI がハングしないように、バックグラウンド スレッドでそのメソッドを呼び出します。進行状況バーまたはある種の待機インジケーターを追加して、操作が進行中であることをユーザーが認識できるようにします。

テキストボックスをメソッドに渡すと、そのメソッドを他の目的で再利用できなくなります。コードの再利用のために (それが重要な場合)、単純にメソッドにリストを返させ、コールバック メソッドにデータの表示方法を理解させる方がクリーンだと思います。

于 2008-10-24T15:16:57.567 に答える
0

[これが元の質問のフォローアップの場所であるかどうかはわかりません]

それで、再帰的なビジネスレイヤー関数は、再帰的な反復ごとにプレゼンテーションレベルのコントロールを更新できないと言っても差し支えありませんか?

于 2008-10-24T17:32:53.737 に答える