我有一个带有几个类的
WPF / C#程序,MainWindow.cs类有用户控件,我想用其他类中发生的计算状态进行更新.在谷歌搜索并借用示例后,我想出了如何在其他类中设置一个Event,并在更改内容时调用它.然后只要主类具有绑定该事件的处理程序,我就可以适当地更新UI内容(状态栏等).下面是我正在做的精简版:
namespace Program
{
public partial class MainWindow : Window
{
public void SetUpHandler()
{
TestA.WorkerProgressThingie += new ProgressChangedEventHandler(TestA_ProgressChanged);
}
void TestA_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage
}
}
public class TestA
{
public static event ProgressChangedEventHandler WorkerProgressThingie;
public static void SomeFunction()
{
int value = 0;
//...(some boring code that does something here)
ProgressChangedEventArgs e = new ProgressChangedEventArgs(value, null);
if (WorkerProgressThingie != null)
WorkerProgressThingie.Invoke(null, e)
}
}
}
>有没有办法简单地从另一个类调用progressBar属性? (即MainWindow.progressBar.Value)?
>当我调用事件时,“object sender”参数的目的是什么,它应该如何正常使用?我看到的例子总是使用’null’.
谢谢!
最佳答案 1)是的,如果宣布公开,您可以访问任何类别的任何部分.在这种情况下,您可以将progressBar控件声明为public,并且任何引用MainWindow类的内容都可以使用它.然而,这将是非常糟糕的做法.相反,您可以绑定一些“值”,该值与活动的当前进度相关更新,并让MainWindow类担心它如何表示该更改(在这种情况下通过更新ProgressBar),
2)所有事件中的对象发送者都是对引发事件的对象的引用,因此事件使用者知道事件的来源.使用null也是IMO的不良做法,一般来说,引发事件的对象应该这样做;
SomeEvent(this, someEventArgs);