2010-07-12 2 views
1

Я разрабатываю небольшую надстройку для ESRI ArcGIS Explorer 1200. Само расширение довольно простое, оно просто использует FileSystemWatcher для ожидания входящего файла, а затем обрабатывает файл ,ArcGIS Explorer: вызывать основной поток из вторичного потока

Моя основная проблема: при возникновении события 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; 
    } 

} 

Любые идеи, как обойти это?

ответ

0

Сохраните ссылку на SynchronizationContext.Current из нити пользовательского интерфейса.
Затем вы можете использовать этот экземпляр SynchronizationContext из любого другого потока, чтобы ссылаться на поток пользовательского интерфейса.

Отказ от ответственности: я ничего не знаю о ArcGIS Explorer; если это не WinForms или интерфейс WPF, это может не сработать.

Смежные вопросы