Я не могу получить массив из C # на WinForms с CefSharp - PullRequest
1 голос
/ 22 июня 2019

У меня есть приложение Win Forms с Chromium. Моя цель - получить строковую переменную (json), сгенерированную ведьмой на земле C #, для использования с функцией javascript. Я не могу получить это в javascript-стране.

Я создал mefod getJSON () в JSObj.cs - он генерировал json. И я видел строку из метода. Я зарегистрировал oblect JSObj на Form1.cs (здесь у меня есть Chromium). Я вызвал JSObj.getJSON () из html с кнопкой, но я не сделал json в коде JavaScript!

<button class="btn btn-info" id="btn3">Test Winform Interaction</button>
$("#btn3").on('click', function () {
            alert(jSObject.getJSON()[0]);
        });
public string getJSON()
        {
            DispHandler hand = new DispHandler(delegate
            {
                string directoryPath = @"C:\";
                List<SObject> sendObjects = new List<SObject>();
                DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath);
                FileInfo[] filesArray = directoryInfo.GetFiles();
                foreach (var el in filesArray)
                {
                    sendObjects.Add(new SObject(el.Name, directoryPath));
                }
                string json = JsonConvert.SerializeObject(sendObjects);
                return json;
            });
            IAsyncResult resultObj = hand.BeginInvoke(null, null);
            var res = hand.EndInvoke(resultObj);
            return res;
        }
public Form1()
        {
            InitializeComponent();
            InitializeChromium();            
            _browser.RegisterAsyncJsObject("jSObject", new JSObj());
        }

ошибок не было. Я ожидаю получения данных json в javascript-land.

1 Ответ

1 голос
/ 23 июня 2019

Связь между C # и CEF является асинхронной, jSObject.getJSON () возвращает Promise для результата, а не сам результат.Попробуйте этот код JS:

$("#btn3").on('click', function () {
    jSObject.getJSON().then(function (r) { alert(r[0]); });
});
...