簡體   English   中英

如何在WP7中同步多個線程?

[英]How can I synchronize multiple threads in WP7?

我是Windows Phone 7Silverlight開發的新手,但我確實有win32和線程方面的經驗。

這是我的問題:

我正在嘗試通過另一個與我正在使用的對象的API一起使用的線程來“同步” UI線程。 換句話說,我想確保在用戶通過按下“后退”按鈕關閉當前XAML頁面之前,正在使用的對象(該對象是XAML頁面后面的C#類的一部分)已被釋放。

其原因是,如果我在NavigatedFrom處理程序中的代碼重新分配,UI線程可能會嘗試釋放對象, 它在事實上被其他線程使用。 因此,我確實必須以某種方式同步此對象的釋放。

理想情況下,當用戶按下電話上的“后退”按鈕時,我所做的所有操作都將標志“ quit”設置為true,以指示用戶打算退出。 在另一個線程上運行的對象所使用的方法將“看到”該標志已設置,然后BeginInvoke *強調文本*對象的釋放代碼(僅因為該對象已分配在UI線程上,所以我認為在不知道其內部工作原理的情況下在同一線程上對其進行分配是有意義的。)最后,它將調用NavigationService.GoBack()以確保“有序”退出。

不幸的是,盡管我確實重寫了NavigatedFrom和OnBackKeyPress方法,但我沒有看到防止用戶按下“后退”按鈕時關閉XAML頁面的方法。 即使它們根本不包含任何代碼,XAML頁面還是會被關閉。

另一件有趣的事情是,我有一個計時器( System.Windows.Threading.DispatchTimer ),對此我將不勝感激。 此計時器是否僅與定義它的XAML頁后面的C#類相關聯? 換句話說,是否存在與每個XAML頁面相關聯的“消息泵”的概念,或者是否只有一個消息泵用於基本上所有XAML頁面都使用的UI線程? 我之所以這樣問是因為,盡管我關閉了其C#類定義計時器的XAML頁面,但它似乎仍在運行。

謝謝。

這樣做的原因是,如果我在NavigatedFrom處理程序中有釋放代碼,則UI線程可能會嘗試釋放該對象,而實際上其他線程正在使用該對象。 因此,我確實必須以某種方式同步此對象的釋放。

真的不是問題。 如果還要在Dispatcher上對導航進行排隊,則不會收到任何NullReferenceExceptions。

只需使用Dispatcher.BeginInvoke(() => NavigationService.Navigate(...))進行安全導航。

此計時器是否僅與定義它的XAML頁后面的C#類相關聯?

如果您按“類”的意思是“ ViewModel”,那么是的,它絕對應該在ViewModel中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM