在我看来,您需要在您的 DLL 中添加一个自定义事件,然后将其附加到您的 GUI 中。
这里有一些代码使它更容易理解。
首先让我们创建一个 DLL 的模拟,它执行类似于加载的操作,还定义了一个我们可以在我们的 GUI 中附加到接收完成百分比的事件:
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();
}
}
}
现在我们有了一个模拟 DLL,它StatusChanged
为我们的 GUI 提供了一个要挂钩的事件。这是一个利用这一点的模拟 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 接收完整的百分比,而 DLL 不需要了解有关 GUI 的任何信息。
我在上面使用的 CustomEventArgs 如下所示:
public class CustomEventArgs : EventArgs
{
public decimal PercentageComplete{get;set;}
}