C# 从其他类更新UI的最佳方法?
我有几个嵌套类,其结构如下: BackupLocation包含备份客户端列表 BackupClient包含备份版本的列表 BackupVersions包含备份文件的列表 在我的UI中,我用BackupLocations填充一个组合框,并且有几个用于客户端、版本和文件的列表框 在处理backuplocation时,我可以轻松地更新状态栏,因为这是UI创建的顶级类。但是如何更新正在处理的每个文件的状态栏和进度栏?由于备份文件有3层,我看不到任何更新UI的方法。文件的实际处理在BackupVersion类中,该类加载其文件C# 从其他类更新UI的最佳方法?,c#,winforms,.net-3.5,user-interface,C#,Winforms,.net 3.5,User Interface,我有几个嵌套类,其结构如下: BackupLocation包含备份客户端列表 BackupClient包含备份版本的列表 BackupVersions包含备份文件的列表 在我的UI中,我用BackupLocations填充一个组合框,并且有几个用于客户端、版本和文件的列表框 在处理backuplocation时,我可以轻松地更新状态栏,因为这是UI创建的顶级类。但是如何更新正在处理的每个文件的状态栏和进度栏?由于备份文件有3层,我看不到任何更新UI的方法。文件的实际处理在BackupVersio
我认为这可能与事件和委托有关,但我不确定如何进行,任何帮助都将不胜感激。我将使用事件,并在课堂上将它们呈现出来 基本上: 使用事件参数在每个类中创建一个事件,该事件可以处理您希望显示的特定状态更新。 推送更新时,调用事件 从上面的类中处理事件,将您想要的任何标识信息添加到事件参数中,例如:如果您想要使用2或3个状态栏,请标识它需要更新的状态栏,或者更确切地说是更新发生的级别 使用新的事件参数调用类上的事件,依此类推。 在一个非常简单的代码示例中,请参见下面的无空检查等。只是一般概念:
class A
{
public A()
{
ExampleB.StatusUpdate += new EventHandler<ExampleArgs>(ExampleB_StatusUpdate);
}
void ExampleB_StatusUpdate(object sender, ExampleArgs e)
{
UpdateUI();
}
public B ExampleB { get; set; }
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class B
{
public B()
{
ExampleC.StatusUpdate += new EventHandler<ExampleArgs>(ExampleC_StatusUpdate);
}
void ExampleC_StatusUpdate(object sender, ExampleArgs e)
{
OnChanged(e);
}
public C ExampleC { get; set; }
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class C
{
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class ExampleArgs : EventArgs
{
public string StatusUpdate { get; set; }
}
我会利用事件,在课堂上把它们泡起来 基本上: 使用事件参数在每个类中创建一个事件,该事件可以处理您希望显示的特定状态更新。 推送更新时,调用事件 从上面的类中处理事件,将您想要的任何标识信息添加到事件参数中,例如:如果您想要使用2或3个状态栏,请标识它需要更新的状态栏,或者更确切地说是更新发生的级别 使用新的事件参数调用类上的事件,依此类推。 在一个非常简单的代码示例中,请参见下面的无空检查等。只是一般概念:
class A
{
public A()
{
ExampleB.StatusUpdate += new EventHandler<ExampleArgs>(ExampleB_StatusUpdate);
}
void ExampleB_StatusUpdate(object sender, ExampleArgs e)
{
UpdateUI();
}
public B ExampleB { get; set; }
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class B
{
public B()
{
ExampleC.StatusUpdate += new EventHandler<ExampleArgs>(ExampleC_StatusUpdate);
}
void ExampleC_StatusUpdate(object sender, ExampleArgs e)
{
OnChanged(e);
}
public C ExampleC { get; set; }
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class C
{
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class ExampleArgs : EventArgs
{
public string StatusUpdate { get; set; }
}
好的。看来我需要更多地研究事件。我已经试着读过了,但它们可能会让人困惑。这个事件有一个EventHandler,它调用一个委托,你将其附加到一个或另一个事物上,除以光速,就得到了它。@Jack-Hehe。基本上,您正在为事件分配一些自定义参数,以允许您将字符串传递回status update方法。现在,基本上发生的事情很简单。C类的最底层得到一个状态更新,然后告诉B类,B类又把它传递给a类。一旦a类有了状态,它就会更新UI。这有点像接力赛,实际上只是传递接力棒。谢谢你,说得好!今晚我将在我的常规编码时间尝试一下:P。到底是什么原因导致C类有状态更新?在代码中调用OnChanged事件?改变了吗?@C级-好吧,随你怎么想。无论何时需要状态更新,只要调用onchangednewexampleargs{StatusUpdate=Foo};例如,Hrmm Ok。看来我需要更多地研究事件。我已经试着读过了,但它们可能会让人困惑。这个事件有一个EventHandler,它调用一个委托,你将其附加到一个或另一个事物上,除以光速,就得到了它。@Jack-Hehe。基本上,您正在为事件分配一些自定义参数,以允许您将字符串传递回status update方法。现在,基本上发生的事情很简单。C类的最底层得到一个状态更新,然后告诉B类,B类又把它传递给a类。一旦a类有了状态,它就会更新UI。这有点像接力赛,实际上只是传递接力棒。谢谢你,说得好!今晚我将在我的常规编码时间尝试一下:P。到底是什么原因导致C类有状态更新?在代码中调用OnChanged事件?改变了吗?@C级-好吧,随你怎么想。无论何时需要状态更新,只要调用onchangednewexampleargs{StatusUpdate=Foo};例如