//metoda uruchamiana w osobnym wątku private void writeModelsFromFileToDB(MyEventArgs args) { int streamPosition = 0; int dataPacketNumber = 0; int totalNumberOfPackets = 0; //do paska postępu ModelBundle modelDataBundle = new ModelBundle(); try { do { //deserialize using (FileStream stream = new FileStream(args.fileName, FileMode.Open)) { int dataPacketLength = 0; byte[] buffer; using (BinaryReader bReader = new BinaryReader(stream)) { stream.Position = streamPosition; dataPacketLength = bReader.ReadInt32(); //najpierw wpis 4 bajty określa długość paczki, która po nim następuje buffer = new byte[dataPacketLength]; bReader.Read(buffer, 0, dataPacketLength); } MemoryStream compressedStream = new MemoryStream(buffer); MemoryStream decompressedStream = new MemoryStream(); using (GZipStream gzipStream = new GZipStream(compressedStream, CompressionMode.Decompress)) { gzipStream.CopyTo(decompressedStream); compressedStream.Close(); } decompressedStream.Position = 0; BinaryFormatter bformatter = new BinaryFormatter(); modelDataBundle = (ModelBundle)bformatter.Deserialize(decompressedStream); if (dataPacketNumber == 0) { totalNumberOfPackets = modelDataBundle.models.Count; if (modelDataBundle.checkedDirectories.Count == 0 && args.selectedDirectoryId == "") { MyMessageBox.display("Nie można odtworzyć modeli gdyż nie wybrano katalogu docelowego \r\na modele w pliku źródłowym wczytane zostały bez katalogu.\r\nSpróbuj wczytać ponownie wybierając katalog docelowy", MessageBoxType.Error); break; } else { writeModelDeclarationsToDB(args, modelDataBundle); } } else { showProgress(dataPacketNumber, totalNumberOfPackets, modelDataBundle.models[0].nazwaModel.ToString()); //pasek postępu writePowierzchniaToDB(modelDataBundle); } decompressedStream.Close(); streamPosition += dataPacketLength + 4; //tj. przesuwam o nagłówek (int czyli 4 bajty) i długość właśnie przeczytanego pakietu modelDataBundle.clear(); dataPacketNumber++; } }while (dataPacketNumber <= totalNumberOfPackets); if (dataPacketNumber >= totalNumberOfPackets) //komunikat o sukcesie tylko wtedy, gdy cała pętla przeszła { MyMessageBox.displayAndClose("Modele wczytane", 1); } hideProgressItems(); //delegat refreshDirectoryTree(); //delegat } catch (ArgumentException ex) { MyMessageBox.display(ex.Message, MessageBoxType.Error); } catch (OutOfMemoryException exc) { MyMessageBox.display(exc.Message + "\r\nwriteModelsFromFileToDB", MessageBoxType.Error); } catch (EndOfStreamException exce) { MyMessageBox.display(exce.Message + "\r\nwriteModelsFromFileToDB \r\nPlik jest uszkodzony"); } }