小编Sim*_*mon的帖子

滚动历史记录的数据结构

我有一个应用程序读取外部数据源的偏移值.这些偏移量是+ - 从中​​心点(nom = 0).

我想保存这些偏移的最后一分钟并将它们显示在滚动图上.该图需要根据最后一分钟的数据自动调整其最小/最大值.

所以我可以看到这指向FIFO队列.

我正在使用Delphi 7,但是当尝试使用TQueue类时,我无法使用Peek()查看任何访问队列中的值(而只是队列的顶部)的方法.

我的问题有更好的数据结构吗?

我需要存储60个浮点数,访问所有这些数字以显示在图表上,并确定队列中任何时间点的最大值.

delphi data-structures

2
推荐指数
1
解决办法
308
查看次数

是否有任何视频编解码器支持嵌入时间码?

我想知道是否有任何视频标准支持在捕获/录制时嵌入时间码。

我需要录制和播放多个视频流,同时保持它们同步。

video video-encoding

2
推荐指数
1
解决办法
5028
查看次数

如何将字符串中的\ xA0(或非ASCII)字符替换为''?

我有一个包含大量非ASCII字符的excel文件,我想用空格字符替换它.

此文本将输入MySQL数据库,并且不会在字符串中使用这些字符导入.我HY000 Incorrect string value试图发布该行时得到一个.

delphi string non-ascii-characters

1
推荐指数
1
解决办法
3052
查看次数

如何使用/理解lambda表达式?

我有以下方法:

private byte[] GetEmailAsBytes(string lstrBody)
{
   byte[] lbytBody;
   ASCIIEncoding lASCIIEncoding = new ASCIIEncoding();
   lbytBody = lASCIIEncoding.GetBytes(lstrBody);
   return lbytBody;
}
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可以转换为lambda表达式.我是新手.我试过了:

Func<string> BodyToBytes = x => {
        ASCIIEncoding lASCIIEncoding = new ASCIIEncoding();
        return lASCIIEncoding.GetBytes(x);
}
Run Code Online (Sandbox Code Playgroud)

但这不编译.简单地说,我希望将字符串转换为一系列字节,并且为了感兴趣,我们希望使用lambda表达式来完成此操作.

c# lambda

1
推荐指数
1
解决办法
292
查看次数

多任务继续

我想更清楚地了解这种情况:

考虑以下代码:

frmProgressAsync prog = new frmProgressAsync(true);
TaskWithProgress t = new TaskWithProgress("Smoothing CP", true);
t.Task = A.ShowMovingAverage(tension,t.Progress)
       .ContinueWith(prev =>
           {
               t.ProgressInformation.Report("Smoothing FG");
               B.ShowMovingAverage(tension, t.Progress);
           });
await prog.RunAsync(t);
Run Code Online (Sandbox Code Playgroud)

我有两个任务,我希望运行A.ShowMovingAverageB.ShowMovingAverage。两者都返回一个任务。

在该prog.RunAsync()方法中,我具有以下几点:

    public virtual Task RunAsync(TaskWithProgress task)
    {
        Show();
        TaskIsRunning();
        task.ContinueWith(Close(), CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, this._Scheduler);
        return task.Task;
    }
Run Code Online (Sandbox Code Playgroud)

因此,我有效地执行了三个任务,在前一个任务完成之后依次执行一个任务。

现在我的问题是,在某些情况下,第一个任务几乎立即完成。调用prog.RunAsync()并将最后的延续附加到任务后,它将立即运行,关闭表单。

我可以看到是否在上次ContinueWith()通话时中断,任务状态为RanToCompletion,但我有点期待继续将其重置为正在进行中。

有人可以更清楚地解释这种行为吗?并提供一个可能的解决方案,以使所有任务(延续)在最终延续之前完成?

c# continuations task-parallel-library async-await

1
推荐指数
1
解决办法
3057
查看次数

将此代码转换为任务以在另一个线程上异步运行

我开始玩任务和异步等待.为了更好地处理如何转换现有代码,我想我会尝试更改同步运行的当前方法:

private bool PutFile(FileStream source, string destRemoteFilename, bool overwrite)
{
    if (string.IsNullOrEmpty(destRemoteFilename)) return false;
    string path = Path.GetDirectoryName(destRemoteFilename);
    if (path == null) return false;
    if (!Directory.Exists(path)) Directory.CreateDirectory(path);
    if (overwrite)
    {
        if (File.Exists(destRemoteFilename)) //delete file if it exists, because we are going to write a new one                 File.Delete(destRemoteFilename);
    }
    else if (File.Exists(destRemoteFilename)) return false;
    using (FileStream dest = File.OpenWrite(destRemoteFilename))
    {
        source.Seek(0, SeekOrigin.Begin);
        source.CopyTo(dest);
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我试图简单地改变方法async,并且涉及Task<bool>但我显然在这里遗漏了一些东西,因为它们似乎都不起作用.我经历过的Type System.Threading.Task<bool>是不值得期待的.

c# multithreading asynchronous task

0
推荐指数
1
解决办法
1241
查看次数