Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中以主窗体创建自定义事件?_C#_Events - Fatal编程技术网

如何在C#中以主窗体创建自定义事件?

如何在C#中以主窗体创建自定义事件?,c#,events,C#,Events,我希望: public static class A { //do something UpdateListOnMainForm() } 我已经知道我可以通过事件来实现这一点,我尝试创建一个事件,但我不需要任何参数,我只想知道如果类a调用该事件,ListView将更新其数据 有人能帮我创建这个活动吗?或者有更好的方法 提前谢谢你 编辑:当我更改列表视图从中获取数据的列表(其他类)时,至少我正在尝试更新列表视图。您希望静态类能够通过事件触发您的主窗体更新其列表视图,而不必特别了解

我希望:

public static class A
{
    //do something
    UpdateListOnMainForm()
}
我已经知道我可以通过事件来实现这一点,我尝试创建一个事件,但我不需要任何参数,我只想知道如果类a调用该事件,ListView将更新其数据

有人能帮我创建这个活动吗?或者有更好的方法

提前谢谢你


编辑:当我更改列表视图从中获取数据的列表(其他类)时,至少我正在尝试更新列表视图。

您希望静态类能够通过事件触发您的主窗体更新其列表视图,而不必特别了解主窗体,据我所知。我会这样做:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        SingletonA.GetInstance.MyEvent += UpdateListView;
    }

    private void UpdateListView(object sender, EventArgs e)
    {
        // Update your listview
    }
}

//lazy initialization of singleton - not thread safe see http://www.dotnettricks.com/learn/designpatterns/singleton-design-pattern-dotnet for other thread safe version
public class SingletonA
{
    private static SingletonA instance = null;
    private SingletonA() { }

    public event EventHandler<EventArgs> MyEvent;

    void TellFormToUpdateListView()
    {
        MyEvent?.Invoke(typeof(SingletonA), EventArgs.Empty);
    }

    public static SingletonA GetInstance
    {
        get
        {
            if (instance == null)
                instance = new SingletonA();

            return instance;
        }
    }
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
SingletonA.GetInstance.MyEvent+=UpdateListView;
}
私有void UpdateListView(对象发送方,事件参数e)
{
//更新您的列表视图
}
}
//singleton的延迟初始化-非线程安全请参阅http://www.dotnettricks.com/learn/designpatterns/singleton-design-pattern-dotnet 对于其他线程安全版本
公共类单音
{
私有静态单例实例=null;
私有单声道(){}
公共事件事件处理程序;
void TellFormToUpdateListView()
{
MyEvent?.Invoke(typeof(SingletonA),EventArgs.Empty);
}
公共静态单例GetInstance
{
得到
{
if(实例==null)
instance=new SingletonA();
返回实例;
}
}
}

您是在谈论创建一个无参数方法吗?事件将如何触发?有点像。当我试图创建一个无参数的方法时,我不能从外部调用它,因为main不是静态的。我想像方法调用一样触发它-如果可能的话。好的,谢谢你的回答。这似乎是我想要的。但是我如何调用方法
TellFormToUpdateListView()
?@Dominik您想什么时候调用它?你可以在课堂上的任何地方叫它SingletonA。试着从外面叫它-至少我在课堂上需要它,在这里它起作用-我的错。太感谢你了-工作!