Обратный вызов C# от DLL

Обнаружение изменений не инициируется, потому что изменилось только значение в вашем входном объекте, а не сам объект.

Если у вас есть только простое свойство, лучше использовать его непосредственно в качестве входных данных (например, только время, а не объект, обертывающий время).

Если у вас есть объект и вам нужно только изменить свойство, вы можете работать с Object.assign ({}, NEW_OBJ), где NEW_OBJ - это ваш измененный объект с новым установленным временем. Таким образом, вы можете убедиться, что ссылка на объект изменяется и срабатывает changeDetection.

Посмотрите здесь . Особенно часть «Понимание изменчивости».

Обновление

Я сделал Stackblitz для вас, чтобы показать, что я имел в виду. Вам не нужно вызывать само changeDetection, если вы создаете новый объект для вашего ввода.

Stackblitz

9
задан Joel Coehoorn 19 November 2008 в 18:13
поделиться

4 ответа

Чтобы подробно остановиться Грабят ответ Происпользования, необходимо объявить делегата и затем передать метод сопоставления в него.

В B:

public delegate void CallbackDelegate(string status);

public void DoWork(string param, CallbackDelegate callback)
{
    callback("status");
}

В A:

public void MyCallback(string status)
{
    // Update your UI.
}

И когда Вы называете метод:

B.DoWork("my params", MyCallback);
13
ответ дан 4 December 2019 в 10:06
поделиться

У Вас есть две опции. Наиболее распространенное должно иметь событие в B и иметь Ваш UI в A, подписываются на то событие. B затем запускает то событие.

Вторая опция состоит в том, чтобы передать в делегате от в качестве параметра к вызову метода в B. B может затем Вызвать того делегата.

6
ответ дан 4 December 2019 в 10:06
поделиться

Передача в объекте обратного вызова в вызове A делает к B. Используйте интерфейс (или плотно связанные библиотеки). Удостоверьтесь, что объект обратного вызова ориентирован на многопотоковое исполнение и ориентирован на многопотоковое исполнение.

1
ответ дан 4 December 2019 в 10:06
поделиться

Если Вы управляете B, то Грабите Происпользование, или ответы Brody будут хорошо работать.

Но что, если Вы не можете изменить B вообще? В этом случае можно всегда переносить метод в делегата собственного создания, поскольку долго это - соответствия подписи та из подписи целевого метода.

Так, скажите, что у Вас есть экземпляр класса по имени B с открытым методом, названным b () (от B dll блок, конечно). Класс A в приложение может назвать его асинхронно как это:

public class A
{
    delegate void BDelegate();

    public void BegineBMethod()
    {
        BDelegate b_method = new BDelegate(B.b);
        b_method.BeginInvoke(BCallback, null);
    }

    void BCallback(IAsyncResult ar)
    {
       // cleanup/get return value/check exceptions here
    }
}
1
ответ дан 4 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: