BackgroundWorker を作成するフォームがあります。その後、ワーカーは何らかの作業を行い、ビジー状態のときに ReportProgress を実行してメッセージを UI に送り返します。次に、これらのメッセージを UI に記録します。ReportProgress は、「通知」と呼ばれるスレッド内の単一のメソッドによって実行されます。
ただし、スレッド内では、静的クラスを呼び出してファイル アクセス タイプの作業を行います。その静的クラスも進行状況を報告する必要があります...そのため、静的クラスを呼び出したスレッド クラスの Notify メソッドを呼び出す必要がありますが、呼び出し元のクラス内のメソッドにはアクセスできません。
したがって、UI はスレッドを作成し、スレッドはクラスを使用しますが、クラス内の Notify メソッドを静的クラスから呼び出す必要があります。これどうやってするの?
これは遠くへの私の試みです。アイデアは、デリゲートを使用しようとすることです...しかし、私は実際にデリゲートを使用することに行き詰まっています。:)
私のスレッドクラスには、次のメソッドがあります。
public void Notify(string message, Constants.ErrorLevel errorLevel)
{
var su = new StatusUpdate {StatusMessage = message, ErrorLevel = 0};
_bw.ReportProgress(0, su);
}
これは機能しています。呼び出し元の UI に適切に報告します。
このクラスでデリゲートを作成しました。
public delegate bool NotificationsDelegate(object MessageHolder);
ファイル管理を処理するための静的クラスを非静的に変更し、作成時にそのデリゲートをファイル マネージャー クラスに渡したいと考えています。
public class FileManager
{
private readonly NotificationsDelegate _notifications;
public FileManager(NotificationsDelegate notifications)
{
_notifications = notifications;
}
private void SendMessageBack(string p, ConsoleColor consoleColor)
{
var su = new StatusUpdate {ErrorLevel = 0, StatusMessage = p};
_notifications(su);
}
それで、私はそれを作成し、通知デリゲートを渡します...そして、私の「SendMessageBack」メソッドで、デリゲート(_notificationsと呼ばれます)を呼び出すことを望みます。
しかし、それは私が立ち往生しているところです。デリゲートはまだ通知メソッドに割り当てられていません。私はイベントに慣れていないので、自分のやり方を推測しています。しかし、誰かがこれを正しくするのを手伝ってくれますか?