Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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#_Wpf_Event Handling_Initializer - Fatal编程技术网

C# 在调用初始化器之前添加事件处理程序

C# 在调用初始化器之前添加事件处理程序,c#,wpf,event-handling,initializer,C#,Wpf,Event Handling,Initializer,我有两个类main window和Foo,在计时方面有点问题: class MainWindow : Window { internal void SomeMethod(string name) { Foo foo = new foo(name) foo.MyEventHandler += EventHandlerMethod; } internal void EventHandlerMethod(object sender, E

我有两个类
main window
Foo
,在计时方面有点问题:

class MainWindow : Window
{
    internal void SomeMethod(string name)
    {
        Foo foo = new foo(name)
        foo.MyEventHandler += EventHandlerMethod;
    }

    internal void EventHandlerMethod(object sender, EventArgs e)
    {
        //do something after foo is done initializing stuff
    }
}

class Foo
{
    internal event EventHandler MyEventHandler;

    internal Foo(string name)
    {
        //start another thread that will at some point via event call FooMethod()
    }

    private void FooMethod()
    {
        MyEventHandler(this, null);
    }
}
问题是我不能保证
Foo
-初始化的线程将花费多长时间和
FooMethod()
之前调用code>


我想到了一个可能的解决方案,即不添加初始值设定项,而是使用一个单独的方法,并在添加事件后简单地调用该方法,但一般来说,有没有一种方法可以在调用初始值设定项之前添加事件?

您以前不能这样做,但可以作为构造函数的一部分来做。只需将处理程序作为参数传入即可


然而,这很难看。拥有生成线程的构造函数并不好,拥有一个“Start”方法要好得多,你以前不能这样做,但你可以作为构造函数的一部分来做。只需将处理程序作为参数传入即可


然而,这很难看。让构造函数生成线程并不好,最好有一个“Start”方法

当然,只需添加一个Foo.StartWork()方法。简单的豌豆。确保线程在窗口关闭后停止引发事件是您真正应该担心的问题。谢谢您的评论,但我在最后一句话中已经提到了这一点。我的问题其实是关于别的。是的,我已经确定如果窗口关闭,不会引发任何事件。初始化完成后,我需要从主窗口中的Foo获取信息。我使用线程是因为初始化可能需要一分钟的时间,我不想让UI冻结使用TPL怎么样?“使用线程一切都很好,但我的问题只是一些其他问题,对不起,如果我听起来粗鲁,我真的不是故意的。当然,只需添加一个Foo.StartWork()方法。简单的豌豆。确保线程在窗口关闭后停止引发事件是您真正应该担心的问题。谢谢您的评论,但我在最后一句话中已经提到了这一点。我的问题其实是关于别的。是的,我已经确定如果窗口关闭,不会引发任何事件。初始化完成后,我需要从主窗口中的Foo获取信息。我使用线程是因为初始化可能需要一分钟的时间,我不想让UI冻结使用TPL怎么样?使用线程一切都很好,但我的问题只是关于其他事情,对不起,如果我听起来粗鲁,我真的不是故意的。谢谢你的回答。我使用构造函数的原因一开始很简单:必须调用线程,因为我需要打开并初始化文件中的大量数据,
Foo
将包含所有数据,因此,不同线程中没有长init,也没有Foo。当我现在意识到在一些罕见的情况下,当线程完成时,我需要一个信号发送到
MainWindow
,这个问题就出现了。谢谢你的回答。我使用构造函数的原因一开始很简单:必须调用线程,因为我需要打开并初始化文件中的大量数据,
Foo
将包含所有数据,因此,不同线程中没有长init,也没有Foo。当我现在意识到在一些罕见的情况下,当线程完成时,我需要一个信号到
MainWindow
,问题就出现了。