c# – 是否可以从另一个类引用MainWindow.cs?

我有一个带有几个类的
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);
点赞