Работаю с Telegram APi от Mr.Round Robin и Awesomium. В моей работе надо сделать скрин шот сайта. Делаю я это через Awesomium.
var webView = WebCore.CreateWebView(1920, 1080);
{
webView.Invoke(new Action(() =>
{
webView.Source = new Uri("http://google.com");
while (webView.IsLoading)
{
WebCore.Update();
}
BitmapSurface surface = (BitmapSurface)webView.Surface;
surface.SaveToPNG("Screenshot.png", true);
webView.Dispose();
}), new object[] { });
}
Но при повторном использовании функции вылетает Exception на var webView = WebCore.CreateWebView(1920, 1080);
.
The calling thread cannot access this object because a different thread owns it.
Это вероятно связанно, что библиотека Telegram работает с многопоточностью. Подскажите как решить эту проблему?
Также вопрос #2. Временами дает Exception на WebCore.Update();
мол вышло за пределы границы. Как решить
P.S Приложение консольное
Это связано с тем, что WebCore
предназначено для работы только в одном потоке.
В вашем случае вам надо явно создать этот поток:
new Thread(() => WebCore.Run()) {
Name = "Awesomium control thread",
IsBackground = true,
}.Start();
Любую работу с Awesomium надо передавать в этот поток:
WebCore.QueueWork(() => {
var webView = WebCore.CreateWebView(1920, 1080);
webView.Source = new Uri("http://google.com");
// ...
});
Отмечу, что крутить цикл в ожидании загрузки означает убить всю многопоточность. Надо подписываться на события:
var tcs = new TaskCompletionSource<object>();
WebCore.QueueWork(async () => {
using(webView = WebCore.CreateWebView(1920, 1080)) {
webView.Source = new Uri("http://google.com");
webView.LoadingFrameComplete += (o, e) => {
if (!webView.IsLoading) tcs.TrySetResult(null);
};
webView.LoadingFrameFailed += (o, e) => {
tcs.TrySetException(new Exception(e.ErrorDescription));
};
await tcs.Task;
}
});
// теперь чтобы дождаться окончания загрузки страницы можно использовать await tcs.Task или tcs.Task.Wait();
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть файл, точнее - его полный путь к файлуМожно ли узнать, есть ли право на запись файла?
Решил попробовать написать чат бота для Twitch'a Писал по уроку в видеоВроде как сделал всё, как надо: приложение создал, связал с аккаунтом, токен...