Всплывающее окно отображается только тогда, когда форма скрыта - PullRequest
0 голосов
/ 11 октября 2018

По сути, программа, над которой я работаю, является консольным приложением C #, которое прослушивает запросы через сокеты.После установления соединения он вызывает и отображает форму Windows с именем frmPdfViewer .

В frmPdfViewer существует ToolStripMenuItem с именем Sign .При щелчке на нем должно отображаться всплывающее окно с подписью, которое пользователь должен подписать.

Теперь моя проблема заключается в том, что при нажатии Sign ToolStripMenuItem форма зависает и непоказать всплывающее окно подписи.Никаких ошибок или исключений не было, просто зависает.Но когда я пытаюсь скрыть frmPdfViewer после нажатия Sign , появляется всплывающее окно подписи.

Почему у него такое поведение?

Вот фрагмент кода для сокета (внутри метода ProcReq () и будет вызываться форма):

        var wsURI = ConfigurationManager.AppSettings["wsURI"];
        var id = ConfigurationManager.AppSettings["id"];
        var ns = ConfigurationManager.AppSettings["namespace"];
        var type = ConfigurationManager.AppSettings["type"];

        var socket = IO.Socket(wsURI + "/" + ns);

        socket.On(Socket.EVENT_CONNECT, () =>
        {
            // Construct Push Message for Device Registration
            JObject reg = MessageFactory.CreateRegistrationMessage(id,
            "RR_" + id, type);

            socket.Emit("peripheral/registration", JsonConvert.SerializeObject(reg));

            socket.On(ns + "/RR_" + id, (reqMsg) =>
            {
                JObject req = reqMsg as JObject;
                JObject reqHeader = (JObject)req["header"];

                RespPayload respPayload = TabletTerminal.GetInstance().ProcReq(req);

                JObject resp = new JObject();
                resp.Add("header", reqHeader);
                resp.Add("payload", JObject.FromObject(respPayload));

                var jsonResp = JsonConvert.SerializeObject(resp);

                socket.Emit(ns + "/RR_" + id, jsonResp);
            });
        })

Вот фрагмент кода для метода ProcReq (здесьформа будет вызываться):

public SignatureRespPayload ProcReq(JObject req)
        {
            SignatureRespPayload signatureRespPayload = new SignatureRespPayload();

            JObject reqPayload = req.GetValue("payload") as JObject;
            string name = (string)reqPayload["name"];
            string reason = (string)reqPayload["reason"];
            string pdfPath = (string)reqPayload["pdfPath"];

            frmPdfViewer pdfViewer = new frmPdfViewer(name, reason, pdfPath);
            pdfViewer.ShowDialog();
            signatureRespPayload.returnValue = pdfViewer.returnValue;

            if (signatureRespPayload.returnValue)
            {
                signatureRespPayload.signedPdfPath = pdfViewer.signedPdfPath;
            }
            else
            {
                signatureRespPayload.errorMessage = pdfViewer.errorMessage;
            }

            pdfViewer.Dispose();
            return signatureRespPayload;
        }

Вот фрагмент кода для события щелчка знака в frmPdfViewer:

( Примечание: Я использую третийParty SDK называется Wacom Signature SDK и может просматривать только интерфейс своих методов, а не реализацию. Метод, который показывает всплывающее окно подписи: Capture () )

try
        {
            SigCtl sigCtl = new SigCtl();
            sigCtl.Licence = Properties.Settings.Default.License;
            DynamicCapture dc = new DynamicCaptureClass();
            DynamicCaptureResult res = dc.Capture(sigCtl, name, reason, null, null);

            if (res == DynamicCaptureResult.DynCaptOK)
            {
                SigObj sigObj = (SigObj)sigCtl.Signature;
                String filename = System.IO.Path.GetTempFileName();
                sigObj.RenderBitmap(filename, 400, 200, "image/png", 0.5f, 0xff0000, 0xffffff, 10.0f, 10.0f, RBFlags.RenderOutputFilename | RBFlags.RenderColor32BPP | RBFlags.RenderEncodeData | RBFlags.RenderBackgroundTransparent);
                string newFile = InsertSignatureImageToPdf(filename);
                loadPdf(newFile, false);
            }
        }
        catch (Exception ex)
        {
            Console.Write(ex.StackTrace);
            MessageBox.Show(ex.Message);
        }

Примечание: Всплывающее окно подписи также появляется, когда я ставлю точку останова перед методом Capture (), а затем продолжаю запускать программу.

1 Ответ

0 голосов
/ 11 октября 2018

Вы можете попробовать добавить formvariable.BringToFront() после показа формы.

...