gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:31:17 25 4
gpt4 key购买 nike

我有一个包含多个类的 WPF/C# 程序,MainWindow.cs 类有用户控件,我想用其他类中发生的计算状态更新这些控件。在谷歌搜索并借鉴示例之后,我想出了如何在另一个类中设置一个事件,并在发生变化时调用它。然后只要主类有一个处理程序绑定(bind)该事件,我就可以适本地更新 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)?
  • 当我调用事件时,“对象发送者”参数的用途是什么?它应该如何正常使用?我看到的示例总是使用“null”。

谢谢!

最佳答案

1) 是的,如果声明为public,您可以访问任何类的任何部分。在这种情况下,您可以将 progressBar 控件声明为公共(public)控件,并且任何引用 class MainWindow 的东西都可以摆弄它。但是,这将是非常糟糕的做法。相反,您可以绑定(bind)到一些与事件的当前进度相关的更新的“值”,并让 MainWindow 类担心它如何表示该更改(在本例中通过更新 ProgressBar),

2) object sender 在所有事件中都是对引发事件的对象的引用,因此事件使用者知道事件来自何处。在 IMO 中使用 null 也是不好的做法,一般来说,引发事件的对象应该这样做;

SomeEvent(this, someEventArgs);

关于c# - 是否可以从另一个类中引用 MainWindow.cs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com