パノラマ ページを使用して Windows Phone 7 アプリケーションを開発しています。
このページには 2 つの項目があり、1 つ目はテキスト、2 つ目はコントロール マップです。この 2 番目のものは読み込みに時間がかかりすぎるため、次の方法で読み込むことにしました。
namespace Tested
{
public partial class DemoDetail : PhoneApplicationPage
{
private bool isFirstNavigateToMap;
private BackgroundWorker bgWorker;
private Map map;
public DemoDetail()
{
InitializeComponent();
map = null;
isFirstNavigateToMap = true;
bgWorker = new BackgroundWorker();
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
}
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
map = new Map();
}
private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (map != null)
mapGrid.Children.Add(map);
}
private void Panorama_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
Panorama panorama = (Panorama)sender;
PanoramaItem panoramaItem = (PanoramaItem)(panorama.SelectedItem);
if ((isFirstNavigateToMap) && (panoramaItem.Name.Equals("mapPanoramaItem")))
{
isFirstNavigateToMap = false;
bgWorker.RunWorkerAsync();
}
}
}
}
しかし、2 番目のパノラマ アイテムに移動すると、次の例外が発生しますmap = new Map();
。
No se controló System.UnauthorizedAccessException
Message=Invalid cross-thread access.
StackTrace:
at MS.Internal.XcpImports.CheckThread()
at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex, IntPtr constructDO)
at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex)
at System.Windows.UIElement..ctor(UInt32 nKnownTypeIndex)
at System.Windows.FrameworkElement..ctor(UInt32 nKnownTypeIndex)
at System.Windows.Controls.Control..ctor(UInt32 nKnownTypeIndex)
at System.Windows.Controls.ContentControl..ctor()
at Microsoft.Phone.Controls.Maps.Core.MapBase..ctor()
at Microsoft.Phone.Controls.Maps.Core.MapCore..ctor()
at Microsoft.Phone.Controls.Maps.Map..ctor()
at Demonstration.DemoDetail.bgWorker_DoWork(Object sender, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.OnRun(Object argument)
at System.Threading.ThreadPool.WorkItem.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadPool.WorkItem.doWork(Object o)
at System.Threading.Timer.ring()
コントロール マップを非同期で作成およびロードするにはどうすればよいですか?