async private Task RefreshList()
        {
            //if (listView.InvokeRequired)
            //{
            //    RefreshListCallback d = new RefreshListCallback(RefreshList);
            //    this.BeginInvoke(d);
            //}
            //else
            {
                CancelRefreshList();
                listView.Items.Clear();
                _itemCollection.Clear();

                if (_exObject == null)
                {
                    return;
                }

                var instatnce = await _exObject.GetInstanceAsync();

                if (instatnce is SqlFDBImageCatalogClass)
                {
                    SqlFDBImageCatalogClass layer = (SqlFDBImageCatalogClass)instatnce;

                    _cancelWorker = false;
                    _gui_worker.RunWorkerAsync(await layer.ImageList());
                }
                else if (instatnce is IRasterCatalogClass)
                {
                    IRasterCatalogClass layer = (IRasterCatalogClass)instatnce;

                    _cancelWorker = false;
                    //_gui_worker.RunWorkerAsync(layer.ImageList);
                    //
                    // Wirft eine Fehler beim Lesen, wenn List in einem
                    // Workerthread ausgeführt wird...
                    // funzt nur bei SQL Server!!
                    //
                    await worker_DoWork(_gui_worker, new DoWorkEventArgs(await layer.ImageList()));
                }
                else if (instatnce is pgImageCatalogClass)
                {
                    pgImageCatalogClass layer = (pgImageCatalogClass)instatnce;

                    _cancelWorker = false;
                    _gui_worker.RunWorkerAsync(await layer.ImageList());
                }
                else if (instatnce is SQLiteFDBImageCatalogClass)
                {
                    SQLiteFDBImageCatalogClass layer = (SQLiteFDBImageCatalogClass)instatnce;

                    _cancelWorker = false;
                    _gui_worker.RunWorkerAsync(await layer.ImageList());
                }
            }
        }
        async private void updateImageToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (_exObject == null || _contextItem == null)
            {
                return;
            }

            FDBImageDataset iDataset = null;

            var instance = await _exObject?.GetInstanceAsync();

            if (instance is SqlFDBImageCatalogClass)
            {
                SqlFDBImageCatalogClass layer = (SqlFDBImageCatalogClass)instance;
                iDataset = new FDBImageDataset(layer._fdb, layer.Name);
            }
            else if (instance is IRasterCatalogClass)
            {
                IRasterCatalogClass layer = (IRasterCatalogClass)instance;
                iDataset = new FDBImageDataset((IImageDB)layer.Dataset.Database, layer.Name);
            }
            if (iDataset == null)
            {
                return;
            }

            int ID = await iDataset.GetImageDatasetItemID(_contextItem.Text);

            if (ID == -1)
            {
                MessageBox.Show(iDataset.lastErrorMessage, "ERROR");
                return;
            }
            if (!await iDataset.UpdateImageDatasetBitmap(ID))
            {
                MessageBox.Show(iDataset.lastErrorMessage, "ERROR");
                return;
            }

            _contextItem.ImageIndex = 0;
        }
        async private void removeImageFromDatasetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (_exObject == null || _contextItem == null)
            {
                return;
            }

            FDBImageDataset iDataset = null;

            var instatnce = await _exObject.GetInstanceAsync();

            if (instatnce is SqlFDBImageCatalogClass)
            {
                SqlFDBImageCatalogClass layer = (SqlFDBImageCatalogClass)instatnce;
                iDataset = new FDBImageDataset(layer._fdb, layer.Name);
            }
            else if (instatnce is IRasterCatalogClass)
            {
                IRasterCatalogClass layer = (IRasterCatalogClass)instatnce;
                iDataset = new FDBImageDataset((IImageDB)layer.Dataset.Database, layer.Name);
            }
            if (iDataset == null)
            {
                return;
            }

            if (listView.SelectedItems.Contains(_contextItem))
            {
                foreach (ListViewItem item in listView.SelectedItems)
                {
                    int ID = await iDataset.GetImageDatasetItemID(item.Text);

                    if (ID == -1)
                    {
                        MessageBox.Show(iDataset.lastErrorMessage, "ERROR");
                        return;
                    }
                    if (!await iDataset.DeleteImageDatasetItem(ID, false))
                    {
                        MessageBox.Show(iDataset.lastErrorMessage, "ERROR");
                        return;
                    }
                    listView.Items.Remove(item);
                }
            }
            else
            {
                int ID = await iDataset.GetImageDatasetItemID(_contextItem.Text);

                if (ID == -1)
                {
                    MessageBox.Show(iDataset.lastErrorMessage, "ERROR");
                    return;
                }
                if (!await iDataset.DeleteImageDatasetItem(ID, false))
                {
                    MessageBox.Show(iDataset.lastErrorMessage, "ERROR");
                    return;
                }
                listView.Items.Remove(_contextItem);
            }
            SetStatusLabel1Text(listView.Items.Count + " Items...");
        }
        async private Task Script(DragEventArgs e)
        {
            try
            {
                if (_exAppl == null)
                {
                    return;
                }

                if (e.Data == null)
                {
                    return;
                }

                string[] data = (string[])e.Data.GetData(DataFormats.FileDrop);
                if (data == null || data.Length == 0)
                {
                    return;
                }

                StringBuilder sb = new StringBuilder();
                foreach (string filename in data)
                {
                    DirectoryInfo di = new DirectoryInfo(filename);

                    var instance = await _exObject?.GetInstanceAsync();

                    if (instance is SqlFDBImageCatalogClass)
                    {
                        SqlFDBImageCatalogClass layer = (SqlFDBImageCatalogClass)instance;
                        if (layer._fdb == null)
                        {
                            return;
                        }

                        if (di.Exists)
                        {
                            sb.Append("\r\nCreateRasterCatalog -connectionstring \"" + layer._fdb.ConnectionString + "\" -ds \"" + layer.Name + "\" -root \"" + filename + "\" -managed");
                        }
                        else
                        {
                            //gView.Raster.File.RasterFileClass rLayer = new gView.Raster.File.RasterFileClass(null, filename);
                            //if (!rLayer.isValid) continue;
                            RasterFileDataset rDataset = new RasterFileDataset();
                            IRasterLayer      rLayer   = rDataset.AddRasterFile(filename);
                            if (rLayer != null)
                            {
                                sb.Append("\r\nCreateRasterCatalog -connectionstring \"" + layer._fdb.ConnectionString + "\" -ds \"" + layer.Name + "\" -append \"" + filename + "\" -managed");
                            }
                        }
                    }
                    else if (instance is IRasterCatalogClass)
                    {
                        IRasterCatalogClass layer = (IRasterCatalogClass)instance;
                        if (layer.Dataset == null)
                        {
                            return;
                        }

                        if (di.Exists)
                        {
                            sb.Append("\r\nCreateRasterCatalog -mdb \"" + ConfigTextStream.ExtractValue(layer.Dataset.ConnectionString, "mdb") + "\" -ds \"" + layer.Name + "\" -root \"" + filename + "\" -managed");
                        }
                        else
                        {
                            //gView.Raster.File.RasterFileClass rLayer = new gView.Raster.File.RasterFileClass(null, filename);
                            //if (!rLayer.isValid) continue;
                            RasterFileDataset rDataset = new RasterFileDataset();
                            IRasterLayer      rLayer   = rDataset.AddRasterFile(filename);
                            if (rLayer != null)
                            {
                                sb.Append("\r\nCreateRasterCatalog -mdb \"" + ConfigTextStream.ExtractValue(layer.Dataset.ConnectionString, "mdb") + "\" -ds \"" + layer.Name + "\" -append \"" + filename + "\" -managed");
                            }
                        }
                    }
                }
                if (sb.ToString() != "")
                {
                    sb.Append(" -recalcspatialindex\r\n");
                    await _exAppl.ExecuteBatch(sb.ToString(), new ExplorerExecuteBatchCallback(this.RefreshList));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }