【问题标题】:Events, Delegates, Callback, INotifyPropertyChanged事件、委托、回调、INotifyPropertyChanged
【发布时间】:2015-08-14 07:03:14
【问题描述】:

假设我有以下内容:

class a 
{  
    List <SomeType> actions;

    ForEachMethod()
    {
        foreach (action in actions)
        {
            OtherFucntion(action);
        }
    }
}

class b 
{
    public Bool WasDoSomeThingSuccesful;

    OtherFunction (SomeType action)
    {
        WasDoSomeThingSuccesful = false;
        DoSomeThing();
    }
}

现在我想要实现:DoSomeThing() 是一些 JS,它会将 WasDoSomethingSuccesfull 的值更改为 true,但它是 async,所以我不知道什么时候会。

所以基本上我想观察该属性是否设置为 true,当它为 true 时,我可以继续 ForEachMethod() 中的另一个动作。

即使我理解委托和事件的概念,我也不知道在这种情况下如何处理它..

【问题讨论】:

  • 在 ASP .NET、winform 或 WPF 中工作?
  • b班级工作完成时,您想通知班级a吗?
  • 没错,但如果有其他方法可以处理这个问题,我真的对所有事情都持开放态度,如果这可以通过添加一些新的类或编辑方法来完成,我不介意。我的问题是 JS 更改了异步属性,所以我不能执行 if (WasDoSomeThingSuccesful) {otherfunction ()} 之类的操作。目前我只是在使用 Thread.Sleep(value),但它是无效的,如果操作更复杂,可能会导致睡眠值不够。
  • 但这两个类没有相互关联。 a 不调用b 反之亦然?
  • 我们可以使用事件通知启动类b的类

标签: c# events callback delegates inotifypropertychanged


【解决方案1】:

像下面给出的例子一样使用事件来通知

public class A
{
    ...
    private void LaunchB()
    {
        var bObj = new B();
        bObj.OnTaskCompleted += TaskCompleted;
        bObj.StartWorking(); //some method call here
    }
    private void TaskCompleted(string status)
    {
        //notification from B comes
    }
    ...
}

public class B
{
    public delegate void TaskCompletedHandler(string status);
    public event TaskCompletedHandler OnTaskCompleted;
    private void DoWork()
    {
        if(completed)
        {
            ...
            if (OnTaskCompleted != null)
            {
               OnTaskCompleted("SUCCESS");
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多