Вопрос по Awesomium

397
14 января 2017, 10:48

Для тех кто знаком с Awesomium для .net

Есть класс

public class SiteShoter
{
    int _width;
    static Thread _awesomiumTask;
    static SynchronizationContext _awesomeContext;
    public SiteShoter(int width)
    {
        _width = width;
    }
    public static void Init()
    {
        if (_awesomiumTask == null)
        {
            _awesomiumTask = new Thread(new ThreadStart(() =>
            {
                WebCore.Started += (s, e) =>
                {
                    _awesomeContext = SynchronizationContext.Current;
                };
                WebCore.Run();
            }));
            _awesomiumTask.Start();
        }
    }
    public void CreateWebshot(Uri url,string destFileName)
    {
        if (_awesomeContext == null)
            return;
        _awesomeContext.Send(state =>
        {
            using (var view = WebCore.CreateWebView(_width, 100, WebViewType.Offscreen))
            {
                view.Crashed += (o, ee) =>
                {
                    Console.WriteLine(ee.Status);
                };
                view.LoadingFrameComplete += (s, ee) =>
                {
                    if (!ee.IsMainFrame)
                        return;
                    var surface = (BitmapSurface)view.Surface;
                    surface.Resized += (oo, eee) =>
                    {
                        surface.SaveToPNG(destFileName, true);
                        Console.WriteLine("COMPLETED!");
                    };
                    var x = view.ExecuteJavascriptWithResult("Math.max(document.body.scrollWidth, document.body.offsetWidth)").ToString();
                    var y = view.ExecuteJavascriptWithResult("Math.max(document.body.scrollHeight, document.body.offsetHeight)").ToString();
                    view.Resize(Convert.ToInt32(x), Convert.ToInt32(y));
                };
                view.Source = url;
            }
        }, null);
    }
}

И он не работает. В методе public void CreateWebshot(Uri url,string destFileName) после view.Source = url; view.IsLoading находится в состоянии true и в нем висит, соответственно view.LoadingFrameComplete не срабатывает. Крэшей тоже нет.

UPD:

Для того, чтобы предотвратить Dispose() я добавил кое что после строки view.Source = url;

view.Source = url;
while (view.IsLoading)
{
}
Console.WriteLine("COMPLETED!");

view.IsLoading будет false, как раз и должно срабатывать событие view.LoadingFrameComplete

Но этого не происходит... view.IsLoading == true всегда.

READ ALSO
Интеграция приватного видео c Youtube

Интеграция приватного видео c Youtube

Скажите пожалуйста, есть ли возможность интегрировать приватное видео на свой сайт используя "The Google API Client https://githubcom/google/google-api-php-client"

373
Сумирование суммы по нарастающей

Сумирование суммы по нарастающей

Делаю вывод сумм по месяцам:

392