pbreda Posted August 23, 2021 at 04:45 PM Report Share #623304 Posted August 23, 2021 at 04:45 PM Boas, tenho um problema com o filestream tento usar este código PackageManager.ClientPack.Add((int)Packages.UPClientPackages.RECEIVE_UPDATE, (data) => { byte[] inData = PackageManager.ReadBytesPackage(data.Length - 4, data); fs.Write(inData, 0, inData.Length); Thread.Sleep(10); bytesRecived += inData.Length; fs.Flush(); OnUpdateDownload?.Invoke(bytesRecived, fileInfo.FileLenght); }); e a app pára a escrita a não ser que use o Thread.sleep(10) não estou a perceber pq...alguém me consegue explicar? Qualquer coisa esfrega a lampada!!!Visite Banco de Software e desfrute do software disponível xD Link to comment Share on other sites More sharing options...
M6 Posted August 24, 2021 at 10:00 AM Report Share #623326 Posted August 24, 2021 at 10:00 AM Não vejo muito sentido em parares a thread (em especial se for a principal) quando recebeste dados e estás a meio da escrita. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
pbreda Posted August 24, 2021 at 04:51 PM Author Report Share #623346 Posted August 24, 2021 at 04:51 PM senão parar o thread o ficheiro fica interrompido....pelo que me a percebi não termina a escrita a tempo do próximo bloco ser escrito...não consigo encontrar outra solução pra alem dessa...já tentei com BeginWrite e BeginRead mas não sei pq, não funciona corretamente. Também tentei com async e o await e nada...fica na mesma. ClientServer.Start(serverAddr, port, () => { PackageManager.ClientPack.Add((int)Packages.UPClientPackages.CONNECTED_OK, (data) => { OnClientConnected?.Invoke(); ClientServer.SendData(PackageManager.WriteStringPackage((int)Packages.UPServerPackages.CHECK_UPDATE, JsonSerializer.SerializeToString(Converters.GetApplicationInfoFromAssembly(app)))); }); PackageManager.ClientPack.Add((int)Packages.UPClientPackages.UPDATE_NEED, (data) => { OnCheckForUpdateComplete?.Invoke(Convert.ToBoolean(PackageManager.ReadShortPackage(data))); }); PackageManager.ClientPack.Add((int)Packages.UPClientPackages.RECEIVE_FILE_INFO, (data) => { fileInfo = JsonDeserializer.DeserializeFromString(PackageManager.ReadStringPackage(data), typeof(FileInfoModel)); fs = File.Open(fileInfo.FileName, FileMode.OpenOrCreate); ClientServer.SendData(PackageManager.WriteShortPackage((int)Packages.UPServerPackages.DOWNLOAD_UPDATE, 1)); }); PackageManager.ClientPack.Add((int)Packages.UPClientPackages.RECEIVE_UPDATE, (data) => { byte[] inData = PackageManager.ReadBytesPackage(data.Length - 4, data); fs.Write(inData, 0, inData.Length); Thread.Sleep(10); bytesRecived += inData.Length; fs.Flush(); OnUpdateDownload?.Invoke(bytesRecived, fileInfo.FileLenght); }); }); Este código é da função completa....talvez dê mais sentido ao problema em questão. Qualquer coisa esfrega a lampada!!!Visite Banco de Software e desfrute do software disponível xD Link to comment Share on other sites More sharing options...
M6 Posted August 26, 2021 at 09:31 PM Report Share #623471 Posted August 26, 2021 at 09:31 PM Tipicamente esse tipo de funcionalidade costuma ser lançada numa thread própria para não bloquear a principal. Podes ir recebendo a informação e colecionando a mesma e mandares escrever o ficheiro apenas quando já tens a informação toda completa do teu lado. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
pbreda Posted August 26, 2021 at 11:15 PM Author Report Share #623476 Posted August 26, 2021 at 11:15 PM humm....consegues me dar um exemplo ou um tutorial pra ter uma ideia de como o fazer? Qualquer coisa esfrega a lampada!!!Visite Banco de Software e desfrute do software disponível xD Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now