我的笔记本电脑上运行着一台服务器,并试图使用 StreamSocket 与之通信。一切正常。我可以发送和接收消息,但我有一个大问题。
var reader = new DataReader(clientSocket.InputStream) {InputStreamOptions = InputStreamOptions.Partial};
Thread.Sleep(1000);
var actualLength = await reader.LoadAsync(33554432); // Buffer of 32 MB
在我的代码的这一部分中,我必须使用 Thread.Sleep(1000) 来让我的 DataReader 自己填满并继续接下来的部分。如果我删除睡眠我的应用程序崩溃。我需要等待输入流完成填充 DataReader,我不知道它总是需要多长时间,我只是在睡眠中选择了 1000 作为任意数字。
我有什么办法可以让这个任务等到输入流完成对阅读器的归档?否则,它将停止在 LoadAsync 行上工作。我试着做 Task.FromResult 并等待读者线,但它没有用(不是 100% 确定我做对了,所以如果应该有效,请告诉我。)我只是不想做一个线程每次我收到来自服务器的响应时都睡一整秒(经常发生。)
另外,我不是 100% 确定问题是这个,我只是做了一些调试,它在实际长度行上崩溃了,所以我把 sleep 放进去只是为了测试并且它工作。所以我认为这是问题所在......
任何帮助表示赞赏!
编辑:异常/调用堆栈
System.Reflection.TargetInvocationException was unhandled
Message: An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in System.Windows.ni.dll
System.Windows.ni.dll!System.Windows.Threading.DispatcherOperation.Invoke() Unknown
System.Windows.ni.dll!System.Windows.Threading.Dispatcher.Dispatch(System.Windows.Threading.DispatcherPriority priority) Unknown
System.Windows.ni.dll!System.Windows.Threading.Dispatcher.OnInvoke(object context) Unknown
System.Windows.ni.dll!System.Windows.Hosting.CallbackCookie.Invoke(object[] args) Unknown
System.Windows.RuntimeHost.ni.dll!System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(System.IntPtr pHandle, int nParamCount, System.Windows.Hosting.NativeMethods.ScriptParam* pParams, System.Windows.Hosting.NativeMethods.ScriptParam* pResult) Unknown