我有一个带有几个类的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)
}
}
}
谢谢!
答案 0 :(得分:2)
1)是的,如果声明为public
,您可以访问任何类的任何部分。在这种情况下,您可以将progressBar控件声明为public,并且任何引用class MainWindow
的内容都可以使用它。然而,这将是非常糟糕的做法。相反,您可以绑定一些“值”,该值与活动的当前进度相关的更新,并让MainWindow类担心它如何表示该更改(在这种情况下通过更新ProgressBar),
2)所有事件中的object sender
都是对引发事件的对象的引用,因此事件使用者知道事件的来源。使用null也是IMO的不良做法,一般来说,引发事件的对象应该这样做;
SomeEvent(this, someEventArgs);