2014-09-15 8 views
0

Мне нужно перенести мой код на Windows 8.1. Проблема в том, что 8.1 делает javascript (не WinJs) асинхронным, когда я ввожу собственный вызов. Пример сценария.Синхронное выполнение Windows 8.1

f1(){ 
window.external.notify();(call to native c# code which calls f2 using Invokescript) 
} 

f2(){ 
//do stuff 
} 

f3(){ 
//do stuff 
} 

f1(); 
f3(); 

Последовательность выполнения f1, f3, а затем f2. f3 не дожидается нативного вызова. Мне нужно это исправить. Любые предложения, пожалуйста.

ответ

0

Я не думаю, что есть способ дождаться окончания вызова в Javascript, поэтому я бы предложил использовать какой-то механизм обратного вызова. В основном, только называют f1, и передать имя следующей функции, которая будет выполнена в параметре вашему уведомляют вызова:

f1(){ 
window.external.notify("f3"); 
} 

f2(){ 
//do stuff 
} 

f3(){ 
//do stuff 
} 

f1(); 

Затем в ScriptNotify случае, получить имя функции для выполнения, а также использовать InvokeScript для его выполнения, когда это делается:

void wb_ScriptNotify(object sender, NotifyEventArgs e) 
{ 
    // Do whatever you need 
    // ... 

    // Resume execution of Javascript code 
    wb.InvokeScript(e.Value, null); 
} 
+0

Спасибо за помощь. Но что в случае, когда f3() возвращает значение. Где я могу назначить это значение. – Query21

+0

@ Query21 Просто переосмыслите свой поток кода. В принципе, вместо выполнения 'f2(); var a = f3(); независимо от того, '', создайте обратный вызов функции, который выполняет 'function callback() {var a = f3(); без разницы; } ' –