2012-06-10 22 views
0

我花了整個週末來實現,當一個文檔處理線程完成,WebBrowser.Document對象壞,無法使用。C#:文檔處理線程後WebBrowser.Document休息結束

這樣的代碼:

if (Browser.Document == null) ... 

拋出一個例外。

我有一些基於事件的哪些負載文件腳本到web瀏覽器,並對其執行操作。所有腳本完成後會引發事件。

然後,根據我的文檔狀態 - 我會運行其他腳本。但是沒有文件!爲什麼?它會發生什麼?它是否被破壞,丟棄,被隨機數據覆蓋?

上次事件之間沒有代碼。調用和測試文檔。早一行我有文檔,下一行不見了!怎麼了?!

System.Threading.Thread.CurrentThread.ManagedThreadId回報那些2行以外的值。這個殺手有沒有解決方法?我只找到一個方法來處理它現在 - 我可以重新加載文件與:

Browser.Url = Browser.Url.但是,這是愚蠢的和多餘的。

整點是爲了讓文件能夠與web瀏覽器上執行更多的操作。

一兩件事 - 線程這觸發我的第一個動作鏈作爲一個新的任務執行。它運行在與文檔上運行的其他代碼不同的線程中。我知道這是錯的,但是我第一次做對了。我不用開始新的任務,而是使用BeginInvoke異步運行我的腳本。但是這個掛在整個應用程序的第一個其他調用代碼。我被困在這裏。如果我以錯誤的方式調用瀏覽器代碼 - 所有多線程應用程序都能正常工作,但我將文檔放在某處。如果我把它稱爲適當的,線程安全的方式 - 應用程序只是掛起,我甚至不能調試它。代碼在調用時死亡,它永遠不會調用它應該調用的方法。當然是默默地。

回答

0

很難說沒有看到一些相關的代碼。我的猜測是你正在嘗試引用一個線程上的對象,而不是它所創建的線程。基於我剛剛處理的問題,我的建議是創建對瀏覽器或文檔對象的靜態引用。

+0

First - Document是隻讀的 - 即使我能將它存儲在其他地方,我也無法將其分配回瀏覽器。 在從線程返回並在之後恢復之前複製瀏覽器對象並不會產生任何效果 - 恢復的對象可以正常工作,但文檔會像以前一樣被打破。 – Harry