私は小さなユニバーサルウィンドウアプリケーションを作成しています。私はMapControlを使ってインターネットからダウンロードしたデータを提示したいと思います。このデータは毎分更新され、発生するたびにMapIconのポジションを更新したいと考えています。 地図をロードした後、60秒ごとに実行され、HttpWebRequestを使用してデータをダウンロードし、受信したJSONを解析し、MapControlに表示されたMapIconの位置を更新するタイマーを作成します。私はタイマーコールバックで新しいMapIcon()を呼び出すときTimerコールバックでのMapIconの作成
すべてが、私は例外を持っているが、正常に動作する必要があります:種類の例外「のSystem.Exception」のnewproject.exeで発生したが、中に処理されなかった
ユーザーコード追加情報:このアプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。 (HRESULTからの例外:0x8001010E(RPC_E_WRONG_THREAD))
マイタイマーコールバックのコードがあるが:
private async void OnTimerTick(Object stateInfo)
{
var TramDataList = await Loader.LoadData();
updateMarkers(TramDataList);
}
private void updateMarkers(List<TramData> tramList)
{
lock (TramMarkerDict)
{
foreach (var tramData in tramList)
{
if (!TramDataDict.ContainsKey(tramData.Id))
{
TramDataDict.Remove(tramData.Id);
TramMarkerDict.Remove(tramData.Id);
}
}
foreach (var tramData in tramList)
{
TramData tmp = null;
var exists = TramDataDict.TryGetValue(tramData.Id, out tmp);
if (exists)
tmp.update(tramData);
else
TramDataDict.Add(tramData.Id, tramData);
}
foreach (var tramData in TramDataDict.Values)
{
MapIcon mapIcon = null;
var geopoint = new Windows.Devices.Geolocation.Geopoint(
new Windows.Devices.Geolocation.BasicGeoposition { Latitude = tramData.Lat, Longitude = tramData.Lng });
var exists = TramMarkerDict.TryGetValue(tramData.Id, out mapIcon);
if (exists)
mapIcon.Location = geopoint;
else
{
mapIcon = new MapIcon { Location = geopoint, Title = tramData.FirstLine, NormalizedAnchorPoint = new Point(0.5, 1) };
TramMarkerDict.Add(tramData.Id, mapIcon);
}
}
}
}