DLLにカスタムイベントが必要で、それをGUIでアタッチする必要があるように思えます。
わかりやすくするためのコードを次に示します。
まず、ロードと同様のことを行い、完了したパーセンテージを受け取ったGUIでアタッチできるイベントを定義するDLLのモックを作成しましょう。
public class MyDLLType
{
public decimal PercentageComplete = 5;
public event EventHandler<CustomEventArgs> StatusChanged;
public virtual void OnStatusChanged(CustomEventArgs e)
{
if(StatusChanged != null)
{
StatusChanged(this, e);
}
}
public void DoSomething()
{
var eventArgs = new CustomEventArgs();
eventArgs.PercentageComplete = PercentageComplete;
OnStatusChanged(eventArgs);
if(PercentageComplete < 100)
{
Thread.Sleep(500);
PercentageComplete++;
DoSomething();
}
}
}
StatusChanged
これで、GUIがフックするイベントを公開するモックDLLができました。これを利用した模擬GUIは次のとおりです。
public class MyGUI
{
void Main()
{
var myNiceDLLType = new MyDLLType();
myNiceDLLType.StatusChanged += UpdateStatusChange;
myNiceDLLType.DoSomething();
}
public void UpdateStatusChange(object sender, CustomEventArgs e)
{
var percentageComplete = e.PercentageComplete;
Console.WriteLine(percentageComplete);
}
}
ビンゴ、私たちのGUIは、DLLがGUIについて何も知る必要なしに、DLLから完全なパーセンテージを受け取っています。
上で使用したCustomEventArgsは次のようになります。
public class CustomEventArgs : EventArgs
{
public decimal PercentageComplete{get;set;}
}