ArcGIS Explorer:从辅助线程调用主线程

时间:2010-07-12 08:33:09

标签: multithreading add-in arcgis esri

我正在为ESRI ArcGIS Explorer 1200开发一个小插件。扩展本身很简单,只是使用FileSystemWatcher等待传入的文件,然后处理文件。

我的主要问题是:当FileSystemWatcher事件触发时,它使用与GUI线程不同的线程。所以我无法访问与GUI相关的对象。 现在我需要一些方法来调用用户线程中的一段代码,但我不知道如何在ArcGIS世界中这样做。

到目前为止,我的扩展程序如下:

public class MyExtension : ESRI.ArcGISExplorer.Application.Extension
{
  FileSystemWatcher _fsw;

  public override void OnStartup()
  {
    _fsw = new FileSystemWatcher(@"c:\Temp\Import", "*.xml");
    _fsw.IncludeSubdirectories = false;
    _fsw.Created += FileCreated;
    _fsw.EnableRaisingEvents = true;
  }

  void FileCreated(object sender, FileSystemEventArgs e)
  {
    GraphicCollection graphic = ESRI.ArcGISExplorer.Application.Application.ActiveMapDisplay.Graphics; // <-- Threading Exception happens here
    MessageBox.Show(Convert.ToString(graphic.Count));
  }

  public override void OnShutdown()
  {
    _fsw.EnableRaisingEvents = false;
  }

}

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

从UI线程中保存对SynchronizationContext.Current的引用 然后,您可以使用来自任何其他线程的此SynchronizationContext实例来调用UI线程。

免责声明:我对ArcGIS Explorer一无所知;如果它不是WinForms或WPF UI,这可能不起作用。