async public Task <gView.Framework.Data.IDataset> Next() { if (_pos == 0) { _pos++; gView.DataSources.PostGIS.PostGISDataset dataset = new gView.DataSources.PostGIS.PostGISDataset(); await dataset.SetConnectionString("Server=" + txtServer.Text + ";Port=" + txtPort.Text + ";User Id=" + txtUser.Text + ";Password="******";Database=" + txtDataset.Text); await dataset.Open(); // Dataset in _dataset zwischenspeichern, damit referenz bestehen bleibt // Dispose ist danach vom Benutzer auszuführen wenn das Objekt nicht mehr verwendet wird. // Ansonsten kann es vorkommen, dass der Garbagecolletor das Dispose ausführt, wenn // ein Anwendung ein dataset abholt, Geoprocessing mit den Layern durchführt und danach // das Dataset Objekt nicht mehr abholt. // Beim Dispose werden dann näml. auch die Datenbankverbingen (wärend eines Geoprocessings) // abgeschnitten !!! return(_dataset = dataset); } return(null); }
public T AllocConnection(gView.Framework.Data.IDataset dataset) { lock (_lockThis) { if (_disposed) { return(null); } _lastAccess = DateTime.Now; if (_locked) { return(null); // Sollte eigentlich nicht vorkommen } // Aufrufende Routinen sollen nicht parallel aufrufen if (_connection == null) { _connection = OpenConnection(dataset); if (_connection != null) { // // erst beim wieder Freigeben starten... // //_lastAccess = DateTime.Now; //StartTimer(); } else { return(null); } } _locked = true; return(_connection); } }
protected abstract T OpenConnection(gView.Framework.Data.IDataset dataset);