Я унаследовал некоторый в основном код спагетти (комбинация C # / VB), который я пытаюсь понять здесь.
Похоже, что это действительно странная ситуация, когда есть два последовательных вызова для запуска событий для удаленного объекта, которые выполняются путем вызова метода DynamicInvoke делегата в форме:
delegate1.DynamicInvoke(args1);
// some code here
delegate2.DynamicInvoke(args2);
делегат1 и делегат2 оба ссылаются на методы в одном и том же удаленном объекте «подписчик».
Согласно всему, что я могу прочитать в документации , DynamicInvoke выглядит так, как будто он должен быть синхронным. Но я вижу своими глазами, когда я помещаю точки останова в удаленный процесс, что методы, на которые ссылаются делегат1 и делегат2, одновременно запускают в разных потоках.
Это еще одна "недокументированная функция" Microsoft? Я должен был ожидать этого? Любые объяснения, почему это должно быть? И если он предназначен для асинхронной работы, как DynamicInvoke может иметь возвращаемое значение?
Спасибо!
Шауль