Есть ли способ решить проблему, при которой два одновременных вызова двух разных классов ждут друг друга - PullRequest
0 голосов
/ 20 февраля 2020

В моем проекте есть два разных класса, которые отвечают за открытие и выполнение модулей и вызываются из другого решения. Мое решение не поддерживает многопоточность.

Теперь моя проблема - у меня есть один класс CPMModule.cs

    public bool QueryLinkActivate()
            {               
                while (true)
                {               
                    if (!_cpmBridge.isBlocked() && !_cpmBridge.isClosing())
                    {                   
                        return true;
                    }               
                }
            }

Этот метод вызывается для проверки, когда Окно модуля готово обрабатывать новый вызов с помощью проверочных значений _cpmBridge.isBlocked() и _cpmBridge.isClosing(), и когда оно возвращает true, открывается новый модуль.

У меня есть другой метод в другом классе CallListenerClass.cs -

    public void stopModal()
            {
                _cpmModule.StopModal();
            }

Этот метод отвечает за закрытие любого всплывающего окна, открытого на экране, и связанного с ним выполнения.

Теперь моя проблема похожа на - Открывается всплывающее окно на моем экране и когда я закрываю это всплывающее окно, запускается выполнение этого метода stopModal(), и иногда приходит новый вызов для метода QueryLinkActivate().

Здесь в этом случае stopModal() выполнение не выполняется завершается, и выполнение переключается на другой метод, т. е. QueryLinkActivate(), в котором есть al oop, который постоянно проверяет, свободен ли модуль или нет, для которого stopModal() выполнение должно быть завершено, что никогда не завершается из-за до QueryLinkActivate() пока l oop. И мое приложение переходит в состояние «Не отвечает», которое затем может быть закрыто только диспетчером задач.

Может ли кто-нибудь помочь мне справиться с этой ситуацией? Как выполнить stopModal() выполнение, а затем возобновить QueryLinkActivate() выполнение метода.

Заранее спасибо

...