Есть ли способ сделать первый
Функция Javascript спать до
что-то происходит (без блокировки
браузер)?
Да - вы можете использовать асинхронную функцию так, как это было задумано: передать ей обратный вызов и позволить ей делать свое дело. Вы должны быть в состоянии передать обратный вызов из C # в вашу функцию JS, которая затем может либо передать его вашей асинхронной функции напрямую, либо обернуть ее в другую функцию, если требуется постобработка.
Пример реализации обратного вызова - это работает с элементом управления WinForms WebBrowser, я не тестировал его с WPF, но они должны быть почти такими же:
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class Callback
{
// allows an instance of Callback to look like a function to the script
// (allows callback() rather than forcing the script to do callback.callMe)
[System.Runtime.InteropServices.DispId(0)]
public void callMe(string url)
{
// whatever you want to happen once the async process is complete
}
}
...
Callback cb = new Callback();
WebBrowser.InvokeScript("myscript", new object[] { cb })
...
function myscript(callback)
{
some_async_function(function()
{
// script-specific completion code
if ( callback )
callback();
});
}