Giter VIP home page Giter VIP logo

fastfilesend's People

Contributors

andreytykhonov avatar enclave2020 avatar

Watchers

 avatar

fastfilesend's Issues

Программа молча падает в фоне

Application: FastFileSend.WPF.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Threading.Tasks.TaskCanceledException
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Main.ApiServer+<GetLastOnline>d__22.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.UI.UserViewModelUpdateStatus+<TimerUserStatusCheck_Elapsed>d__13.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_1(System.Object)
   at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Вылет при отправке файла на 12.5 гб

Application: FastFileSend.WPF.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentNullException
   at System.Uri..ctor(System.String)
   at FastFileSend.Main.FexFileUploader+<UploadAsync>d__2.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<UploadFile>d__21.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<Send>d__17.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.WPF.MainWindow+<ButtonSend_Click>d__5.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at FastFileSend.WPF.App.Main()

System.ArgumentNullException:

Time: 12/29/2019 1:53:21 PM
Error: Unhandled Exception
System.Exception: CurrentDomainOnUnhandledException ---> System.ArgumentNullException: Value cannot be null.
Parameter name: handler
  at System.Net.Http.HttpMessageInvoker..ctor (System.Net.Http.HttpMessageHandler handler, System.Boolean disposeHandler) [0x00023] in <9d6a2df2a4584ac98314b928227a7f53>:0 
  at System.Net.Http.HttpClient..ctor (System.Net.Http.HttpMessageHandler handler, System.Boolean disposeHandler) [0x00000] in <9d6a2df2a4584ac98314b928227a7f53>:0 
  at FastFileSend.Main.ApiServer.SendQuery[T] (System.String api, System.String query) <0xa02f6848 + 0x000d3> in <cfce03c7ef274be88fb97c5bb3c46dde>:0 
  at FastFileSend.Main.ApiServer.CreateNewAccount (System.Net.Http.HttpMessageHandler httpClientHandler) [0x0006a] in <cfce03c7ef274be88fb97c5bb3c46dde>:0 
  at FastFileSend.Program.FastFileSendProgram.Login () [0x000a9] in <8f0483557bb1411a93ade43681ad79eb>:0 
  at FastFileSend.App.OnStart () [0x000a5] in <64f5f254ccc347e3bd3984f064631b95>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in <31cfadf7953449d0a21cf7f416c9f592>:0 
  at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <4304aa07354041e589a77d38341ebba1>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () <0xa052a5a8 + 0x0005f> in <4304aa07354041e589a77d38341ebba1>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <4304aa07354041e589a77d38341ebba1>:0 
  at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.78(intptr,intptr)
   --- End of inner exception stack trace ---

(Полу)автоматическое обновление

Между кнопками Download и Close сделать Check updates, которая тупо проверит, есть ли что нового на гитхабе или в артефактах.
И если есть что нового, то:

  • В идеале, само скачает и перезапустит себя
  • Приемлемо, если добавит себя в список загрузок, а Sender будет 1337
  • Норм, если просто откроет ссылку в браузере

Пользователь сам решает, куда принимать файлы

Если ты Вася, и у тебя есть компьютер и телефон, то ты можешь выбрать компьютер своим основным устройством. Когда кто-то другой хочет отправить файл и выбирает из контактов «Вася», то файл приходит на компьютер. А если компьютер отключен, то либо на все остальные, либо на какое-то конкретное устройство приходит уведомление: «Дима отправил файл, но на данный момент устройство “компьютер” недоступно» и под ним кнопки «Перенаправить файл сюда» (скачивает на телефон и файл считается принятым), «Скачать копию» (файл скачается, но когда компьютер будет в сети, то файл на него всё равно примется) и «Скрыть» (не знаю, много ли толка от такой кнопки, ведь уведомления можно закрыть и без каких-либо кнопок).

Так же Вася может в настройках аккаунта сделать выбранные устройства видимыми, поэтому другой пользователь может отправить файл либо «Васе» (сработает как описано выше), либо на «Вася/Телефон» (файл отправится прямиком на телефон, игнорируя настройку предпочитаемого устройства)

Падение после выбора файла для отправки

Time: 12/15/2019 11:27:13 AM
Error: Unhandled Exception
System.Exception: CurrentDomainOnUnhandledException ---> System.FormatException: Input string was not in a correct format.
  at System.Number.ThrowOverflowOrFormatException (System.Boolean overflow, System.String overflowResourceKey) [0x0001a] in <3f010a3e1afe46dca45ce780d52c4fcb>:0 
  at System.Number.ParseInt64 (System.ReadOnlySpan`1[T] value, System.Globalization.NumberStyles styles, System.Globalization.NumberFormatInfo info) [0x00016] in <3f010a3e1afe46dca45ce780d52c4fcb>:0 
  at System.Int64.Parse (System.String s) [0x00016] in <3f010a3e1afe46dca45ce780d52c4fcb>:0 
  at Plugin.FilePicker.IOUtil.GetPath (Android.Content.Context context, Android.Net.Uri uri) [0x000b0] in <8283f9c30b1b41b2a46dd45643b296cd>:0 
  at Plugin.FilePicker.FilePickerActivity.OnActivityResult (System.Int32 requestCode, Android.App.Result resultCode, Android.Content.Intent data) [0x00039] in <8283f9c30b1b41b2a46dd45643b296cd>:0 
--- End of stack trace from previous location where exception was thrown ---

  at Plugin.FilePicker.FilePickerImplementation.PickFile (System.String[] allowedTypes) [0x0006d] in <8283f9c30b1b41b2a46dd45643b296cd>:0 
  at FastFileSend.FastFileSendProgramXamarin.SelectFileAsync () [0x00060] in <59b2ceefd05c4fa1aeb1d4f83dde47b2>:0 
  at FastFileSend.Program.FastFileSendProgram.Send () [0x000ea] in <5dcc9ff35013491ba41d5f99c2f22964>:0 
  at FastFileSend.Views.MainPage.NavigateFromMenu (System.Int32 id) [0x000b2] in <59b2ceefd05c4fa1aeb1d4f83dde47b2>:0 
  at FastFileSend.Views.MenuPage.<.ctor>b__3_0 (System.Object sender, Xamarin.Forms.SelectedItemChangedEventArgs e) [0x00090] in <59b2ceefd05c4fa1aeb1d4f83dde47b2>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in <3f010a3e1afe46dca45ce780d52c4fcb>:0 
  at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <fa496181352646d58cb1110c0186ee41>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () <0x7c6436a9d0 + 0x0004b> in <fa496181352646d58cb1110c0186ee41>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <fa496181352646d58cb1110c0186ee41>:0 
  at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.78(intptr,intptr)
   --- End of inner exception stack trace ---

Концепт окна загрузок только для вам

image

Иконки (пять штук):

d-e d-f arr u-e u-f

Общая информация

  • Первый, третий и четвёртый столбцы имеют фиксированный размер (авторазмер по контенту, если такое имеется). Второй столбец тянется вместе с окном (ну или если окно не тянется, то просто забирает всё оставшееся место), но если имя файла слишком огромное, то пусть обкусывается эллипсами троеточиями вроде Screenshot 2029-10-1....

  • Заголовки столбцов не думаю что нужны, так как тут инфа сгруппирована так, что сложновато будет описать одним словом происходящее, да и без них красивее

Описание каждого столбца

  • Слева иконка показывает, файл был отправлен или принят. Иконка совмещена с прогрессбаром: в начале отправки иконка пустая, по мере прогресса заполняется (скачивание заполняется сверху вниз, отправка снизу вверх).

  • Имя файла совмещено с размером файла / статусом в два ряда. Имя показывается обычным шрифтом, информация помельче.

    • При отправке / скачивании файла в скобках пишется прогресс и оставшееся время («53%, 00:03 left»)
    • При ожидании скачивания на той стороне, в скобках пишется «Awaiting remote download»
    • Во всех остальных случаях пишется только размер файла
  • Третий столбец отцентрирован вертикально, в нём показывается отправитель и через иконку-стрелку принимающий

  • Четвёртый столбец большими буквами показывает относительную дату, вторым рядом покзывает абсолютную дату шрифтом помельче

Отправка папок

Автоматически запаковываются на клиенте, к имени папки добавляется какое-нибудь специфическое слово, и при приёме файла программа смотрит на имя файла и распаковывает его.

Например, отправляешь папку Source, она запаковывается в Source.folder.zip, а на клиенте программа видит что файл кончается на .folder. и распаковывает его.

Отправка на несуществующий айди выбивает ошибку

Это как #9, только для ведроида

Time: 12/14/2019 1:27:55 PM
Error: Unhandled Exception
System.Exception: CurrentDomainOnUnhandledException ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Xamarin.Forms.Platform.Android.FastRenderers.ImageRenderer'.
  at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) <0x7c63213110 + 0x000e0> in <befd09500e9141f79755fe57430fe8b9>:0 
  at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualObjectMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) <0x7c63215160 + 0x0003f> in <befd09500e9141f79755fe57430fe8b9>:0 
  at Android.Widget.ImageView.get_Drawable () [0x0000a] in <fc1a80b885554d00b2b64a8f0133ac71>:0 
  at Xamarin.Forms.Platform.Android.FastRenderers.ImageElementManager.TryUpdateBitmap (Xamarin.Forms.Platform.Android.IImageRendererController rendererController, Android.Widget.ImageView Control, Xamarin.Forms.IImageElement newImage, Xamarin.Forms.IImageElement previous) [0x00024] in <039dc6f9f40c4a668399f93931013d38>:0 
  at Xamarin.Forms.Platform.Android.FastRenderers.ImageElementManager.OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x000db] in <039dc6f9f40c4a668399f93931013d38>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in <c614a74494c94685b0067b6c01f55348>:0 
  at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <fc1a80b885554d00b2b64a8f0133ac71>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () <0x7c632699d0 + 0x0004b> in <fc1a80b885554d00b2b64a8f0133ac71>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <fc1a80b885554d00b2b64a8f0133ac71>:0 
  at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.78(intptr,intptr)
   --- End of inner exception stack trace ---

Не знаю, а нужен ли тут вообще лог

Не работает редактирование пользователей

По долгому тапу по пользователю предлагает либо удалить, либо редактировать. Удаление не работает, а редактирование иногда показывает айди 0, а иногда тоже просто ничего не делает

Концепты дизайнов только для вам

Хотел сделать редизайн загрузок, но потом что-то понесло. Если вдруг что, местами может встречаться ад перфекциониста, так как я не думал что меня затянет настолько серьёзно и ставил объекты на глаз

Главное окно

  • Перекрасить тема с синего на зелёный, так как ФФС всегда был зелёным (забудем тот серый интерфейс с не-зелёным камуфляжным логотипом);
  • Кнопки с выезжающим меню больше нет, вместо неё стильный модный молодёжный дизайн, который не знаю насколько модный, просто из головы придумал что-то и оно мне вдруг даже понравилось;
  • Во время загрузки показывается процент, а когда файл загружен/скачен, то отображается его дата;
  • Цвет прогрессбара синий при скачивании, оранжевый при отправке и зелёный в спокойствии;
  • Если у тебя есть возможность отображать размер файла (всегда отображать только три цифры), как делает винда, то было бы просто идеально. То есть 1.13 KB, 47.3 KB, 640 KB;
  • Тап по файлу открывает файл;
  • Тап по своему айди скопирует его в буфер (не уверен в надобности, но а вдруг);
  • Тап по «Send file» открывает список контактов.

Основной вариант

image

Вариант, если в будущем у программы настройки не появятся )0

image

Первоначальный вариант, но что-то он мне показался не очень

image

Контакты

  • Тап по контакту открывает отправку файлов;
  • Долгий тап по контакту открывает его редактирование.

С закосом под стоковое приложение контактов

image

Альтернативный вариант, но что-то мне в нём всё равно не нравится

image

Редактирование/создание контакта

  • [Back] уйдёт без сохранения изменений;
  • [Save] сохранит изменения;
  • Вне контекста звучит глупо, но оно интуитивнее чем принудительное добавление по выходу, как оно есть сейчас… вроде как.

image

System.UnauthorizedAccessException при чтении с флешки

Time: 14.12.2019 12:03:05
Error: Unhandled Exception
System.Exception: CurrentDomainOnUnhandledException ---> System.UnauthorizedAccessException: Access to the path "/storage/2651-0223/anime/Vinland Saga/Vinland Saga 15.avi" is denied.
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x001b7] in <9c87a948012d41d5b6f6696fbd0d265b>:0 
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode) [0x00000] in <9c87a948012d41d5b6f6696fbd0d265b>:0 
  at (wrapper remoting-invoke-with-check) System.IO.FileStream..ctor(string,System.IO.FileMode)
  at FastFileSend.Program.FastFileSendProgram.SendFile (FastFileSend.UI.UserModel target, System.String path) [0x0002b] in <1fd3902d28944eb8a6acbf089861e919>:0 
  at FastFileSend.Program.FastFileSendProgram.Send () [0x00157] in <1fd3902d28944eb8a6acbf089861e919>:0 
  at FastFileSend.Views.MainPage.NavigateFromMenu (System.Int32 id) [0x000b2] in <19ee1e53c4c64c1b91dde0f845ed0958>:0 
  at FastFileSend.Views.MenuPage.<.ctor>b__3_0 (System.Object sender, Xamarin.Forms.SelectedItemChangedEventArgs e) [0x00090] in <19ee1e53c4c64c1b91dde0f845ed0958>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in <9c87a948012d41d5b6f6696fbd0d265b>:0 
  at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <8902c450aa9d4f2a859f59e50ac058e8>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () <0x7f6ec0a9d0 + 0x0004b> in <8902c450aa9d4f2a859f59e50ac058e8>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <8902c450aa9d4f2a859f59e50ac058e8>:0 
  at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.78(intptr,intptr)
   --- End of inner exception stack trace ---

Программа падает, если в имени файла есть символ решётки

Application: FastFileSend.WPF.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Net.Http.HttpRequestException
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Main.ApiServer+<Upload>d__24.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<SendFile>d__17.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<Send>d__16.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.WPF.MainWindow+<ButtonSend_Click>d__5.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at FastFileSend.WPF.App.Main()

Заставлять пользователя дать доступ к фс

Если пользователь запретил доступ к файловой системе, то тогда показывать окошко «не буду работать, пока не предоставите доступ» с кнопкой в настройки.

По типу как сделано в «сбербанке». Просто первое приложение, что под руку попалось:
image

Список недавних загруженных файлов

Например, нужно поделиться большим файлом с двумя людьми. Отправляешь одному человеку, потом заходишь в список недавних файлов и выбираешь там отправку второму товарищу. У него скачивание начнётся сразу же, без ожидания загрузки с твоей стороны.

System.ObjectDisposedException: Cannot access a disposed object.

Скорее всего на пекарне тоже самое

Time: 14.12.2019 12:11:58
Error: Unhandled Exception
System.Exception: CurrentDomainOnUnhandledException ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Xamarin.Forms.Platform.Android.FastRenderers.ImageRenderer'.
  at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) <0x7f6ebc5110 + 0x000e0> in <8afc950054ff4da78302d6a18323e39d>:0 
  at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeNonvirtualObjectMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) <0x7f6ebc7330 + 0x0003b> in <8afc950054ff4da78302d6a18323e39d>:0 
  at Android.Views.View.get_Context () <0x7f6ebe95d0 + 0x0007b> in <8902c450aa9d4f2a859f59e50ac058e8>:0 
  at Xamarin.Forms.Platform.Android.Platform.GetNativeSize (Xamarin.Forms.VisualElement view, System.Double widthConstraint, System.Double heightConstraint) [0x0001f] in <039dc6f9f40c4a668399f93931013d38>:0 
  at Xamarin.Forms.Forms+AndroidPlatformServices.GetNativeSize (Xamarin.Forms.VisualElement view, System.Double widthConstraint, System.Double heightConstraint) [0x00000] in <039dc6f9f40c4a668399f93931013d38>:0 
  at Xamarin.Forms.VisualElement.OnSizeRequest (System.Double widthConstraint, System.Double heightConstraint) <0x7f6ed89270 + 0x00117> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.Image.OnSizeRequest (System.Double widthConstraint, System.Double heightConstraint) <0x7f6ed5eb10 + 0x00053> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.VisualElement.OnMeasure (System.Double widthConstraint, System.Double heightConstraint) <0x7f6ed891d0 + 0x0004f> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.VisualElement.GetSizeRequest (System.Double widthConstraint, System.Double heightConstraint) <0x7f6ed885b0 + 0x0026b> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.VisualElement.Measure (System.Double widthConstraint, System.Double heightConstraint, Xamarin.Forms.MeasureFlags flags) <0x7f6ed88c30 + 0x0024b> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.StackLayout.CalculateNaiveLayout (Xamarin.Forms.StackLayout+LayoutInformation layout, Xamarin.Forms.StackOrientation orientation, System.Double x, System.Double y, System.Double widthConstraint, System.Double heightConstraint) <0x7f6ed7f060 + 0x00707> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.StackLayout.CalculateLayout (Xamarin.Forms.StackLayout+LayoutInformation layout, System.Double x, System.Double y, System.Double widthConstraint, System.Double heightConstraint, System.Boolean processExpanders) <0x7f6ed7ee50 + 0x0019f> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.StackLayout.LayoutChildren (System.Double x, System.Double y, System.Double width, System.Double height) <0x7f6ed7e7a0 + 0x000ff> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.Layout.UpdateChildrenLayout () <0x7f6ed64720 + 0x005bb> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.Layout.OnSizeAllocated (System.Double width, System.Double height) <0x7f6ed646b0 + 0x0003b> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.VisualElement.SizeAllocated (System.Double width, System.Double height) <0x7f6ed893c0 + 0x00047> in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Xamarin.Forms.Layout.ResolveLayoutChanges () [0x0005c] in <8e9ab226c9a54dbdb9366a1fb41e66e3>:0 
  at Java.Lang.Thread+RunnableImplementor.Run () <0x7f6ec0a9d0 + 0x0004b> in <8902c450aa9d4f2a859f59e50ac058e8>:0 
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <8902c450aa9d4f2a859f59e50ac058e8>:0 
  at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.78(intptr,intptr)
   --- End of inner exception stack trace ---

Не сохраняются пользователи после редактирования

Я вбил твой ID с ошибкой. Отредактировать смог, и оно работает, но когда выхожу из программы и захожу обратно, то он снова старый. Но если после этого добавить ещё юзера, то норм. Видимо, по событию редактирования данные не отсылаются на сервер

Upload System.Net.Http.HttpRequestException

Application: FastFileSend.WPF.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Net.Http.HttpRequestException
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Main.ApiServer+<Upload>d__24.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<SendFile>d__17.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<Send>d__16.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.WPF.MainWindow+<ButtonSend_Click>d__5.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at FastFileSend.WPF.App.Main()

Хранить API для загрузки на своём сервере

Программа обращается сначала к своему серверу, получает оттуда ссылки загрузки и уже по ним загружает файл.
Плюсы:

  • При смене API не нужно будет пересобирать приложения для компьютера, телефона, веба и рассылать его всем подряд.
  • Если программой пользуется человек, который не дружит с техникой, то тебе не нужно объяснять ему как скачать и обновить программу. На компьютере можно сделать автообновление, а если это телефон?
  • В теории, с таким походом можно хранить файлы на любом файлообменнике. Не то, чтобы это было нужно, но мало ли.

System.Net.Http.HttpRequestException

Приложение: FastFileSend.WPF.exe
Версия платформы: v4.0.30319
Описание. Процесс был завершен из-за необработанного исключения.
Сведения об исключении: System.Net.Http.HttpRequestException
   в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   в System.Runtime.CompilerServices.TaskAwaiter`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].GetResult()
   в FastFileSend.Main.FileDownloader+<DownloadAsync>d__16.MoveNext()
   в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   в System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   в FastFileSend.Program.FastFileSendProgram+<List_CollectionChanged>d__13.MoveNext()
   в System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   в System.Windows.Threading.DispatcherOperation.InvokeImpl()
   в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   в MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   в System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   в MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   в System.Windows.Threading.DispatcherOperation.Invoke()
   в System.Windows.Threading.Dispatcher.ProcessQueue()
   в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   в MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   в MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   в System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   в MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   в System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   в System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   в System.Windows.Application.RunDispatcher(System.Object)
   в System.Windows.Application.RunInternal(System.Windows.Window)
   в System.Windows.Application.Run(System.Windows.Window)
   в System.Windows.Application.Run()
   в FastFileSend.WPF.App.Main()

Настраиваемые папки загрузок

  • Выбор папки для загрузки файлов
  • Выбор папок для отдельных пользователей (например, чтобы от всех приходило в одну папку, а от кого-то конкретного в другую)
  • Как вариант, сортировка файлов по типам. Например, я бы сделал так, чтобы все файлы скидывались в одно место, а если отправляешь целые папки, то они сохранялись в другое место. Потому что если отсортировать папку по даже изменения, но новые файлы будут в самом начале, а принятые папки постоянно будут появляться в самом низу папки и нужно будет вручную листать туда. Но это если будет возможность отправлять папки.

Авто скрытие бокового меню и убирание фокуса с «Send» после выбора пункта

Когда выбираешь Send, то поверх открывается меню выбора человека. Но когда нажимаешь «назад», то снова отображается меню с выделенным пунктом Send. То есть чтобы отправить файл, нужно нажать Downloads (который тоже не скрывает менюшку) и снова Send

image

Возможность делать своё устройство публичным

Будет сгенерирована публичная ссылка, куда можно загружать файлы, только при обычной работе программы файл загружается в хранилище и скачивается у другого пользователя, а тут файл загружается в хранилище и ссылка на его скачивание отображается на публичной странице, которую можно отправить кому-нибудь. Опционально можно сделать загрузку файлов на этой странице, тогда всё скинутое в браузер будет автоматически принято владельцем страницы.

Если честно, я не уверен насчёт этой идеи, нужна ли она вообще. Ведь если нужно кому-то отправить файл, у кого нет программы, то можно просто отправить ему прямую ссылку загрузки, а если кто-то хочет загрузить тебе, то он просто загрузит файл напрямую на fex

Падает при попытке скачать скурим

Application: FastFileSend.WPF.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Threading.Tasks.TaskCanceledException
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Main.FileDownloader+<DownloadAsync>d__16.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<List_CollectionChanged>d__14.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Internal.AppModel.IFileDialog.Show(IntPtr)
   at Microsoft.Win32.FileDialog.RunVistaDialog(IntPtr)
   at Microsoft.Win32.FileDialog.RunDialog(IntPtr)
   at Microsoft.Win32.CommonDialog.ShowDialog()
   at FastFileSend.WPF.FastFileSendProgramWindows+<SelectFileAsync>d__0.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.Program.FastFileSendProgram+<Send>d__17.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.WPF.MainWindow+<ButtonSend_Click>d__5.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at FastFileSend.WPF.App.Main()

(все файлы весят по 0 байт)
image

Вылет при попытке отправить файл, который занят системой

В принципе, это нормальное явление, но хотелось бы, чтобы был не вылет, а просто какое-нибудь сообщение о том, что файл занят

Application: FastFileSend.WPF.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.IOException
   at System.IO.__Error.WinIOError(Int32, System.String)
   at System.IO.FileStream.Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean, Boolean)
   at System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean)
   at System.IO.FileStream..ctor(System.String, System.IO.FileMode)
   at FastFileSend.Program.FastFileSendProgram.HistoryModelAdd(System.String, FastFileSend.UI.UserModel)
   at FastFileSend.Program.FastFileSendProgram+<Send>d__17.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   at FastFileSend.WPF.MainWindow+<ButtonSend_Click>d__5.MoveNext()
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   at System.Windows.Application.RunDispatcher(System.Object)
   at System.Windows.Application.RunInternal(System.Windows.Window)
   at System.Windows.Application.Run(System.Windows.Window)
   at FastFileSend.WPF.App.Main()

Наброски концептов дизайнов только для вам

Не сказать, что это что-то прорывное, но, похоже, что-то подобное всё же можно реализовать теми компонентами. Пусть будут оба варианта, не знаю какой лучше, если они вообще реализуемы

image

image

System.Net.Http.HttpRequestException

Сведения об исключении: System.Net.Http.HttpRequestException
   в System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   в FastFileSend.Main.ApiServer+<SendQuery>d__23`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext()
   в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   в FastFileSend.Main.ApiServer+<NotifyOnline>d__27.MoveNext()
   в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
   в FastFileSend.Main.ApiServer+<TimerHeartbeat_Elapsed>d__25.MoveNext()
   в System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0(System.Object)
   в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   в System.Windows.Threading.DispatcherOperation.InvokeImpl()
   в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
   в MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   в System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   в System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   в MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   в System.Windows.Threading.DispatcherOperation.Invoke()
   в System.Windows.Threading.Dispatcher.ProcessQueue()
   в System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   в MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   в MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   в System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   в System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   в System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   в MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   в MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   в System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   в System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame)
   в System.Windows.Application.RunDispatcher(System.Object)
   в System.Windows.Application.RunInternal(System.Windows.Window)
   в System.Windows.Application.Run(System.Windows.Window)
   в FastFileSend.WPF.App.Main()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.