我有一個運行WebBrowser的應用程序。此WebBrowser顯示一個可以發出長時間請求的Web應用程序。只要請求繼續執行,窗體就會凍結,Windows將在標題中添加「(Not Responding)」。與主窗體分開運行WebBrowser
是否可以讓WebBrowser與主窗體分開加載?這樣用戶可以更改表單的位置?
我有一個運行WebBrowser的應用程序。此WebBrowser顯示一個可以發出長時間請求的Web應用程序。只要請求繼續執行,窗體就會凍結,Windows將在標題中添加「(Not Responding)」。與主窗體分開運行WebBrowser
是否可以讓WebBrowser與主窗體分開加載?這樣用戶可以更改表單的位置?
你可以嘗試TaskCompletionSource
這樣
WebBrowser webBrowser = new WebBrowser();
navigateclass client = new navigateclass(webBrowser);
await client.navigateurl("http://example.com");
和實施
class navigateclass
{
TaskCompletionSource<object> navigation;
WebBrowser webBrowser;
public navigateclass(WebBrowser wb)
{
navigation = new TaskCompletionSource<object>();
webBrowser = wb;
webBrowser.DocumentCompleted += (sender, e) =>
{
if (e.Url == webBrowser.Url)
{
navigation.TrySetCompleted(null);
}
};
}
public Task navigateurl(string url)
{
navigation = new TaskCompletionSource<object>();
webBrowser.Navigate(url);
return navigation.Task;
}
}
「navigation.TrySetComplete」不存在我錯過了什麼嗎? 和「await」不起作用,要麼說我應該將「navigateurl」 - 方法標記爲「異步」,但是如果我這樣做,返回給我這個消息:「因爲'navigateclass.navigateurl(string)'是一個異步返回'Task'的方法,返回關鍵字後面不能有對象表達式,你是否打算返回'Task
你需要讓web請求異步的,所以他們不會阻止用戶界面線程 –
@MalteR Web應用程序是獨立的,並託管在iis服務器上 – municool
您對服務器的請求需要異步 –