本文整理汇总了C#中IProgress类的典型用法代码示例。如果您正苦于以下问题:C# IProgress类的具体用法?C# IProgress怎么用?C# IProgress使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
IProgress类属于命名空间,在下文中一共展示了IProgress类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Run
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
var users = _userManager.Users
.DistinctBy(ChannelDownloadScheduledTask.GetUserDistinctValue)
.Select(i => i.Id.ToString("N"))
.ToList();
var numComplete = 0;
foreach (var user in users)
{
double percentPerUser = 1;
percentPerUser /= users.Count;
var startingPercent = numComplete * percentPerUser * 100;
var innerProgress = new ActionableProgress<double>();
innerProgress.RegisterAction(p => progress.Report(startingPercent + (percentPerUser * p)));
await DownloadContent(user, cancellationToken, innerProgress).ConfigureAwait(false);
numComplete++;
double percent = numComplete;
percent /= users.Count;
progress.Report(percent * 100);
}
progress.Report(100);
}
示例2: UploadMessageAsync
/// <inheritdoc/>
public async Task<Uri> UploadMessageAsync(Stream content, DateTime expirationUtc, string contentType, string contentEncoding, IProgress<int> bytesCopiedProgress, CancellationToken cancellationToken = default(CancellationToken))
{
Requires.NotNull(content, "content");
Requires.Range(expirationUtc > DateTime.UtcNow, "expirationUtc");
string blobName = Utilities.CreateRandomWebSafeName(DesktopUtilities.BlobNameLength);
if (expirationUtc < DateTime.MaxValue)
{
DateTime roundedUp = expirationUtc - expirationUtc.TimeOfDay + TimeSpan.FromDays(1);
blobName = roundedUp.ToString("yyyy.MM.dd") + "/" + blobName;
}
var blob = this.container.GetBlockBlobReference(blobName);
// Set metadata with the precise expiration time, although for efficiency we also put the blob into a directory
// for efficient deletion based on approximate expiration date.
if (expirationUtc < DateTime.MaxValue)
{
blob.Metadata["DeleteAfter"] = expirationUtc.ToString(CultureInfo.InvariantCulture);
}
blob.Properties.ContentType = contentType;
blob.Properties.ContentEncoding = contentEncoding;
await blob.UploadFromStreamAsync(content.ReadStreamWithProgress(bytesCopiedProgress), cancellationToken);
return blob.Uri;
}
示例3: InstallPackage
public async Task InstallPackage(IProgress<double> progress, PackageVersionInfo package, CancellationToken cancellationToken)
{
// Target based on if it is an archive or single assembly
// zip archives are assumed to contain directory structures relative to our ProgramDataPath
var isArchive = string.Equals(Path.GetExtension(package.targetFilename), ".zip", StringComparison.OrdinalIgnoreCase);
var target = Path.Combine(isArchive ? _appPaths.TempUpdatePath : _appPaths.PluginsPath, package.targetFilename);
// Download to temporary file so that, if interrupted, it won't destroy the existing installation
var tempFile = await _httpClient.GetTempFile(new HttpRequestOptions
{
Url = package.sourceUrl,
CancellationToken = cancellationToken,
Progress = progress
}).ConfigureAwait(false);
cancellationToken.ThrowIfCancellationRequested();
// Validate with a checksum
if (package.checksum != Guid.Empty) // support for legacy uploads for now
{
using (var crypto = new MD5CryptoServiceProvider())
using (var stream = new BufferedStream(File.OpenRead(tempFile), 100000))
{
var check = Guid.Parse(BitConverter.ToString(crypto.ComputeHash(stream)).Replace("-", String.Empty));
if (check != package.checksum)
{
throw new ApplicationException(string.Format("Download validation failed for {0}. Probably corrupted during transfer.", package.name));
}
}
}
cancellationToken.ThrowIfCancellationRequested();
// Success - move it to the real target
try
{
File.Copy(tempFile, target, true);
//If it is an archive - write out a version file so we know what it is
if (isArchive)
{
File.WriteAllText(target+".ver", package.versionStr);
}
}
catch (IOException e)
{
_logger.ErrorException("Error attempting to move file from {0} to {1}", e, tempFile, target);
throw;
}
try
{
File.Delete(tempFile);
}
catch (IOException e)
{
// Don't fail because of this
_logger.ErrorException("Error deleting temp file {0]", e, tempFile);
}
}
示例4: PushHumptyOffTheWall
internal static void PushHumptyOffTheWall(IProgress progress, bool writeVerbose, string mainFilePathname)
{
Guard.AgainstNull(progress, "progress");
FileWriterService.CheckFilename(mainFilePathname);
var rootDirectoryName = Path.GetDirectoryName(mainFilePathname);
// NB: This is strictly an ordered list of method calls.
// Don't even 'think' of changing any of them.
CheckForUserCancelRequested(progress);
DeleteOldFiles(rootDirectoryName);
CheckForUserCancelRequested(progress);
WriteVersionFile(mainFilePathname);
// Outer Dict has the class name for its key and a sorted (by guid) dictionary as its value.
// The inner dictionary has a caseless guid as the key and the byte array as the value.
// (Only has current concrete classes.)
var classData = GenerateBasicClassData();
var wellUsedElements = new Dictionary<string, XElement>
{
{SharedConstants.LangProject, null},
{SharedConstants.LexDb, null}
};
var guidToClassMapping = WriteOrCacheProperties(mainFilePathname, classData, wellUsedElements);
CheckForUserCancelRequested(progress);
BaseDomainServices.PushHumptyOffTheWall(progress, writeVerbose, rootDirectoryName, wellUsedElements, classData, guidToClassMapping);
#if DEBUG
// Enable ONLY for testing a round trip.
// FLExProjectUnifier.PutHumptyTogetherAgain(progress, writeVerbose, mainFilePathname);
#endif
}
示例5: SyncInternal
private async Task SyncInternal(ServerInfo server, IProgress<double> progress, CancellationToken cancellationToken)
{
_logger.Debug("Beginning ServerSync with server {0}, Id {1}", server.Name, server.Id);
if (string.IsNullOrWhiteSpace(server.AccessToken) && string.IsNullOrWhiteSpace(server.ExchangeToken))
{
_logger.Info("Skipping sync process for server " + server.Name + ". No server authentication information available.");
progress.Report(100);
return;
}
// Don't need these here
var result = await _connectionManager.Connect(server, new ConnectionOptions
{
EnableWebSocket = false,
ReportCapabilities = false,
UpdateDateLastAccessed = false
}, cancellationToken).ConfigureAwait(false);
if (result.State == ConnectionState.SignedIn)
{
await SyncInternal(server, result.ApiClient, progress, cancellationToken).ConfigureAwait(false);
progress.Report(100);
}
else
{
_logger.Info("Skipping sync process for server " + server.Name + ". ConnectionManager returned a state of {0}", result.State.ToString());
progress.Report(100);
}
}
示例6: Run
/// <summary>
/// Runs the specified progress.
/// </summary>
/// <param name="progress">The progress.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
var allSongs = _libraryManager.RootFolder
.GetRecursiveChildren(i => !i.IsFolder && (i is IHasArtist))
.Cast<IHasArtist>()
.ToList();
var allArtists = _libraryManager.GetArtists(allSongs).ToList();
var numComplete = 0;
var numArtists = allArtists.Count;
foreach (var artistItem in allArtists)
{
cancellationToken.ThrowIfCancellationRequested();
try
{
await artistItem.RefreshMetadata(cancellationToken).ConfigureAwait(false);
}
catch (IOException ex)
{
_logger.ErrorException("Error validating Artist {0}", ex, artistItem.Name);
}
// Update progress
numComplete++;
double percent = numComplete;
percent /= numArtists;
progress.Report(100 * percent);
}
}
示例7: LoadEmployees
private DataResult<IList<Employee>> LoadEmployees(CancellationToken token, IProgress<double> progress)
{
var employees = XDocument.Load(@"data\sampledata.xml")
.Descendants("Employee")
.Select(x => new Employee {
Number = int.Parse(x.Descendants("Number").First().Value),
Name = x.Descendants("Name").First().Value,
Surname = x.Descendants("Surname").First().Value,
Salary = double.Parse(x.Descendants("Salary").First().Value)
})
.ToList();
var itemIndex = 0;
var result = new DataResult<IList<Employee>> {
Result = new List<Employee>()
};
try {
foreach (var employee in employees) {
Thread.CurrentThread.Join(100);
result.Result.Add(employee);
token.ThrowIfCancellationRequested();
progress.Report((++itemIndex*100)/employees.Count);
}
}
catch (OperationCanceledException ex) {
result.Exception = ex;
}
return result;
}
示例8: FillDataTo
protected override async Task FillDataTo(System.Net.WebRequest webrqst, CancellationToken cancellationToken, IProgress<ProgressReport> progress)
{
progress.ReportWhenNotNull(() => ProgressReport
.CreateNew(RequestResponseSteps
.Requesting_N_Uploading, 0, 1));
var qd = System.Text.Encoding.UTF8.GetBytes(JsonClientHelper.GetQueryData(RequestData.PostFieldValues));
webrqst.ContentType = "application/x-www-form-urlencoded";
#if SILVERLIGHT_4||SILVERLIGHT_5||DOTNET45
webrqst.ContentLength = qd.Length;
#endif
var rqstStrm = await webrqst.GetRequestStreamAsync().ConfigureAwait(false);
await rqstStrm.WriteAsync(qd, 0, qd.Length).ConfigureAwait(false);
progress.ReportWhenNotNull(() => ProgressReport
.CreateNew(RequestResponseSteps
.Requesting_N_Uploading, 1, 1));
}
示例9: ExportTexturesAsync
public async Task ExportTexturesAsync(string textureDir, IProgress<string> progress = null, CancellationToken cancellation = default(CancellationToken)) {
foreach (var texture in Textures.Values) {
if (cancellation.IsCancellationRequested) return;
progress?.Report(texture.Name);
await FileUtils.WriteAllBytesAsync(Path.Combine(textureDir, texture.Name), TexturesData[texture.Name], cancellation);
}
}
示例10: Execute
/// <summary>
///
/// </summary>
/// <param name="cancellationToken"></param>
/// <param name="progress"></param>
/// <returns></returns>
public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
{
var users = _userManager.Users.Where(u => UserHelper.GetTraktUser(u) != null).ToList();
// No point going further if we don't have users.
if (users.Count == 0)
{
_logger.Info("No Users returned");
return;
}
// purely for progress reporting
var percentPerUser = 100 / users.Count;
double currentProgress = 0;
var numComplete = 0;
foreach (var user in users)
{
try
{
await SyncTraktDataForUser(user, currentProgress, cancellationToken, progress, percentPerUser).ConfigureAwait(false);
numComplete++;
currentProgress = percentPerUser * numComplete;
progress.Report(currentProgress);
}
catch (Exception ex)
{
_logger.ErrorException("Error syncing trakt data for user {0}", ex, user.Name);
}
}
}
示例11: TryMergeEntries
public static bool TryMergeEntries(LexEntry entry1, LexEntry entry2, string[] traitsWithMultiplicity, IProgress progress)
{
if (!entry1.LexicalForm.CanBeUnifiedWith(entry2.LexicalForm))
{
progress.WriteMessageWithColor("gray","Attempting to merge entries, but could not because their Lexical Forms clash in some writing system.");
return false;
}
if (!SenseMerger.TryMergeProperties(entry1, entry2, traitsWithMultiplicity, "entries for "+entry1.ToString(), progress))
return false;
// at this point, we're committed to doing the merge
entry1.LexicalForm.MergeIn(entry2.LexicalForm);
var senses = entry2.Senses.ToArray();
foreach (var sense in senses)
{
MergeOrAddSense(entry1, sense, traitsWithMultiplicity, progress);
}
if (entry2.ModificationTime > entry1.ModificationTime)
{
entry1.ModificationTime = entry2.ModificationTime;
}
entry1.IsDirty = true;
return true;
}
示例12: RunInternal
private void RunInternal(IProgress<double> progress, CancellationToken cancellationToken)
{
var allItems = _libraryManager.RootFolder
.RecursiveChildren
.ToList();
var musicAlbums = allItems
.OfType<MusicAlbum>()
.ToList();
AttachMovieSoundtracks(allItems, musicAlbums, cancellationToken);
progress.Report(25);
AttachTvSoundtracks(allItems, musicAlbums, cancellationToken);
progress.Report(50);
AttachGameSoundtracks(allItems, musicAlbums, cancellationToken);
progress.Report(75);
AttachAlbumLinks(allItems, musicAlbums, cancellationToken);
progress.Report(100);
}
示例13: ExtractImage
private void ExtractImage(List<WriteableBitmap> tempTiles, BitmapSource image, int spacing, int offset, IProgress<ProgressDialogState> progress = null)
{
var sourceImage = BitmapFactory.ConvertToPbgra32Format(image);
var jump = 16 + spacing;
var totalTiles = ((image.PixelWidth - offset) / jump) * ((image.PixelHeight - offset) / jump);
var currentTile = 0;
for (var y = offset; y < image.PixelHeight; y += jump)
{
for (var x = offset; x < image.PixelWidth; x += jump)
{
var tileImage = new WriteableBitmap(16, 16, 96, 96, PixelFormats.Pbgra32, null);
tileImage.Blit(new System.Windows.Rect(0, 0, 16, 16), sourceImage, new System.Windows.Rect(x, y, 16, 16));
tempTiles.Add(tileImage);
currentTile++;
if (progress != null)
{
progress.Report(new ProgressDialogState() {
ProgressPercentage = currentTile * 100 / totalTiles,
Description = string.Format("Extracting {0} / {1}", currentTile, totalTiles)
});
}
}
}
}
示例14: DoAsync
public Task DoAsync(IProgress<int> Progress)
{
Progress.Report(1);
Thread.Sleep(800);
Progress.Report(95);
return Task.FromResult<object>(null);
}
示例15: Run
/// <summary>
/// Runs the specified progress.
/// </summary>
/// <param name="progress">The progress.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
public async Task Run(IProgress<double> progress, CancellationToken cancellationToken)
{
var files = _libraryManager.GetAllIntroFiles().ToList();
var numComplete = 0;
foreach (var file in files)
{
cancellationToken.ThrowIfCancellationRequested();
try
{
await RefreshIntro(file, cancellationToken).ConfigureAwait(false);
}
catch (OperationCanceledException)
{
throw;
}
catch (Exception ex)
{
_logger.ErrorException("Error refreshing intro {0}", ex, file);
}
numComplete++;
double percent = numComplete;
percent /= files.Count;
progress.Report(percent * 100);
}
}