我有一個kyosk的WPF應用程序。WPF如何在特定間隔加載XML文件
應用程序每隔一小時從遠程服務器加載XML內容。
我需要每小時調用一次服務器(我不需要絕對精度)並更新應用程序(下載後臺數據綁定到UI的更新對象)。
什麼是在WPF應用程序中做更簡單的方法。如果可能,請提供代碼示例。
我有一個kyosk的WPF應用程序。WPF如何在特定間隔加載XML文件
應用程序每隔一小時從遠程服務器加載XML內容。
我需要每小時調用一次服務器(我不需要絕對精度)並更新應用程序(下載後臺數據綁定到UI的更新對象)。
什麼是在WPF應用程序中做更簡單的方法。如果可能,請提供代碼示例。
有很多方法可以創建定期刷新。這是一個包含簡單線程循環的代碼片段...
public partial class MainWindow : Window
{
private bool _isActive;
public MainWindow()
{
InitializeComponent();
StartXmlRefresher(5000);
}
private void StartXmlRefresher(int sleepMilliseconds)
{
_isActive = true;
Task.Run(() =>
{
while (_isActive)
{
RefreshXml();
if(_isActive) Thread.Sleep(sleepMilliseconds);
}
});
}
private void RefreshXml()
{
Console.WriteLine(@"Refresh started");
// your stuff here
Console.WriteLine(@"Refresh completed");
}
}
線程循環直到_isActive成員設置爲false。每次刷新後,線程將休眠指定的時間。您也可以使用任何計時器變體來做同樣的事情。
注意:此片段用於.net 4.5。如果您使用的是較低版本的版本,則需要使用任務工廠啓動該線程。這裏是展示瞭如何使用工廠啓動一個線程的一個片段:
private void StartXmlRefresherWithFactory(int sleepMilliseconds)
{
_isActive = true;
Task.Factory.StartNew(() =>
{
while (_isActive)
{
RefreshXml();
Thread.Sleep(sleepMilliseconds);
}
});
}
調用StartNew在功能上等同於創建一個使用它的構造函數中的一個任務,然後調用開始以安排執行。來源:http://msdn.microsoft.com/en-us/library/dd321439(v=vs.100).aspx
4.5 Task.Run方法本質上是工廠方法的語法糖,所以無論你使用哪一個都會得到相同的結果。
對不起格式化;今天似乎沒有工作。
從某些[timer](http://msdn.microsoft.com/zh-cn/library/system.windows.threading.dispatchertimer(v = vs.110).aspx)和[DownloadStringAsync](http: //msdn.microsoft.com/en-us/library/ms144202(v=vs.110).aspx) – Alberto
@Alberto,你似乎有正確的想法...你會不會添加一個答案,並提供問題作者與一些示例代碼? – Sheridan