私は c# .net で小さなアプリを開発しています。色々な使い方をしたいと思います。Windows フォーム アプリおよびコマンド ライン アプリとして。だから私はインターフェースプロジェクトを持っていて、内部コアdllプロジェクトを持っています。そのdllのいくつかの手順で、ユーザーに連絡して、操作を続行する必要があるかどうかを尋ねます。だから...私のインターフェースプロジェクトを通じてユーザーと通信するためのより良い方法はどれでしょうか? 私のdllクラスに渡された、または何らかのサービス参照を介して渡されたある種のデリゲート関数でしょうか?
質問する
194 次
1 に答える
0
すでに使用されている用語:
- インターフェイスプロジェクト
- 内部コアdll プロジェクト
DLL がユーザーに何かを要求する必要があるのはなぜですか? DLL が実際の作業だけを行うように、設計全体を再考します。ユーザーに何をすべきかを尋ねるなど、他のすべてのことは、ユーザー インターフェイス プロジェクトでのみ実行する必要があります。
DLL が何をすべきか問い合わせるために呼び出すことができるコールバックを作成することはできますが、その呼び出しがユーザーの操作を提供するとは決して想定しないでください。つまり、情報が返される方法だけをDLL が知る必要がないように設計する必要があります。
例: DLL の 1 つに、フォルダーからフォルダーにファイルをコピーする関数が含まれているとA
しますB
。1 つのファイルのコピーが失敗した場合、他のすべてのファイルを中止するか続行するかをユーザーに決定してもらいます。次のようなイベントを作成できます。
public class QueryContinueEventArgs : EventArgs
{
public QueryContinueEventArgs(string failedFile, Exeption failure)
{
FailedFile = failedFile;
Failure = failure;
Continue = false;
}
public string FailedFile { get; private set; }
public Exception Failure { get; private set; }
public Continue { get; set; }
}
public event EventHandler<QueryContinueEventArgs> QueryContinueAfterCopyFailure;
protected bool OnQueryContinueAfterCopyFailure(string fileName, Exception failure)
{
if (QueryContinueAfterCopyFailure != null)
{
QueryContinueEventArgs e = new QueryContinueEventArgs(fileName, failure);
QueryContinueAfterCopyFailure(this, e);
return e.Continue;
}
return false;
}
割り当てられたイベント ハンドラーは、ユーザーの操作を提供し、Continue
それに応じてフラグを設定できます。
于 2013-10-01T10:46:36.583 に答える