2017-10-04 22 views
0

我有一個運行WebBrowser的應用程序。此WebBrowser顯示一個可以發出長時間請求的Web應用程序。只要請求繼續執行,窗體就會凍結,Windows將在標題中添加「(Not Responding)」。與主窗體分開運行WebBrowser

是否可以讓WebBrowser與主窗體分開加載?這樣用戶可以更改表單的位置?

+0

你需要讓web請求異步的,所以他們不會阻止用戶界面線程 –

+0

@MalteR Web應用程序是獨立的,並託管在iis服務器上 – municool

+0

您對服務器的請求需要異步 –

回答

0

你可以嘗試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; 
    } 
} 
+0

「navigation.TrySetComplete」不存在我錯過了什麼嗎? 和「await」不起作用,要麼說我應該將「navigateurl」 - 方法標記爲「異步」,但是如果我這樣做,返回給我這個消息:「因爲'navigateclass.navigateurl(string)'是一個異步返回'Task'的方法,返回關鍵字後面不能有對象表達式,你是否打算返回'Task '?「。 最新錯誤? – municool

相關問題