在里面利用的是依赖属性的状态改变来时时更新一些数据,如已上传的文件大小,以及文件上传的状态等,由于代码很多,挑选部分类似的代码如下,后面将源代码公布。
| 代码如下 | 复制代码 |
|
/// NotifyPropertyChanged("BytesUploaded"); Percentage = (int)((value * 100) / _fileStream.Length); } private void NotifyPropertyChanged(string prop) public event PropertyChangedEventHandler PropertyChanged;
|
|
还有文件的上传时采用分块处理的,选择一块 byte[] buffer = new byte[4 * 4096]大小的内存,将文件分成N块如此大小的文件,在循环上传至最终完成。
此代码在FileUploader.cs中,这一块是最重要的,如下所示,
| 代码如下 | 复制代码 |
|
/// //文件是否上传完毕? if (_dataSent == _dataLength) //上传当前数据块 //通知上传进度修改 _client.ChannelFactory.Close();
|
|
再就是在上传的过程中需要一直判断文件是否被删除、完成或者中断,在FileUploader.cs中需要关注这段代码,
| 代码如下 | 复制代码 |
|
void _client_StoreFileAdvancedCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
|
|
其中需要限制文件大小,以及同时上传的文件数量需要关注mpost.SilverlightMultiFileUploadTestPage.aspx中的InitParameters参数,以前的也可以在配置文件中配置,如果要改成配置文件的形式可以更改代码Page.xaml.cs中的代码。
| 代码如下 | 复制代码 |
|
/// //加载定制配置信息串 if (initParams.ContainsKey("MaxUploads") && !string.IsNullOrEmpty(initParams["MaxUploads"])) if (initParams.ContainsKey("MaxFileSizeKB") && !string.IsNullOrEmpty(initParams["MaxFileSizeKB"])) if (initParams.ContainsKey("FileFilter") && !string.IsNullOrEmpty(initParams["FileFilter"]))
if(!string.IsNullOrEmpty( ConfigurationManager.AppSettings["FileFilter"])) }
|
|
其中还有其他的一些读者可以自己看代码调试运行试试,下面是运行的截图,环境是vs2010、silverlight4.0环境下。
孢子2生物进化中文版(Spores)
孢子2生物进化中文版让我们来做一回疯狂的博士,打造一个属于自
叫我万岁爷九游官方版
叫我万岁爷带你体验当换地点感觉,全新的模拟手游大作让你开始一
梦回凤歌
梦回凤歌手游中你将步入古代的宫廷纷争之中,本想度过美好幸福的
洋果子店rose最新版本
洋果子店最新版是一款十分容易让人垂涎的开店经营类手游。游戏玩
明日大亨最新版
明日大亨手游,一个非常经典有趣的模拟经营类型的商战手游,在游