我有一个控件可以将1..n个文件分块上传到我的WCF服务。分块和重组是通过对WCF服务的多次调用完成的,对于1个文件来说都是很好的。如何阻止Silverlight,直到进行一系列异步WCF调用?
但是,当我有超过1个文件,我遇到了一些问题。包含每个文件的数据的外部循环在第一个文件完成上传之前继续。事实上,如果需要10次调用通过WCF调用将文件分块到服务器,则处理将在第一次调用WCF之后返回,因为它是异步的,不会阻塞。整个过程由上传按钮点击启动,所以我认为这是在UI线程上完成的。我曾尝试使用'AutoResetEvent'但无济于事;它总是冻结。
我需要的是外循环停止处理,直到1..n异步调用(通过ProcessFile方法)内的WCF完成并且整个单个文件已被上传。下面的代码:
'FileUploadData is an Observable collection of IO.FileInfo objects
For Each FileItem In FileUploadData
'Method internally calls WCF asynchronously and does so continually until file is completely uploaded.
ProcessFile(FileItem)
'NEED TO STOP HERE until file passed in above is complete.
'Currently processing continues on because 1st call to WCF is async and processing is returned to here.
Next
我不一定要找这里syncronous解决方案,但我需要一些方法,让这些文件既可以在他们自己线程上传或“ProcessFile”方法1日完全上传(仍然调用WCF异步),然后继续外循环到上面显示的下一个文件。
关于如何解决这个问题的任何想法?谢谢!
在继续之前,您需要等待上传发送完成的事件。这意味着将算法从循环改变为不同的东西。 – ChrisF 2012-02-07 15:42:29