如何在进行一系列异步WCF调用之前阻止Silverlight?

时间:2012-02-07 15:39:07

标签: wcf silverlight asynchronous

我有一个控件可以将1..n文件以块的形式上传到我的WCF服务中。分块和重组是通过多次调用WCF服务完成的,所有这些都适用于1个文件。

然而,当我有超过1个文件时,我遇到了一些问题。包含每个文件的数据的外部循环在第一个文件完成上载之前继续。实际上,如果通过WCF调用将文件chunck到服务器需要10次调用,则处理在第一次调用WCF之后返回,因为它是异步的而没有阻塞。整个过程由上传按钮单击启动,因此我假设这是在UI线程上完成的。我尝试过使用'AutoResetEvent'但无济于事;它总是冻结。

我需要的是外部循环停止处理,直到完成内部(通过ProcessFile方法)的1..n异步调用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

我不一定在这里寻找同步解决方案,但是我需要一些方法来允许这些文件上传到他们的自己的线程或者完全上传到'ProcessFile'方法1(仍然在继续外部循环到上面显示的下一个文件之前调用WCF async。

关于如何解决这个问题的任何想法?谢谢!

1 个答案:

答案 0 :(得分:0)

好的,这个问题几乎和发布这个问题一样快(当发生这种情况时很好)。这篇文章(http://www.informit.com/articles/article.aspx?p=1759240)帮助我想到了一种与我已经使用的基本方法相比略有不同的方法。

我现在使用LINQ查询一次只处理来自集合的1个文件而不是循环来连续处理所有这些文件。文件完成加载后,我将其从集合中删除,然后我引发了一个在ProcessFile方法的 end 处声明的事件。引发事件处理程序方法并选择要在集合中处理的下一个文件,并重复此操作直到完成。

Dim NextUpload = (From f In FileUploadData
                 Select f).FirstOrDefault

If NextUpload IsNot Nothing Then
   ProcessFile(NextUpload)
End If

像魅力一样!