小编Gra*_*ham的帖子

将后台工作程序更新为async-await

因此,这就是我目前使用后台工作程序将大量内容保存到文件中的方式,同时向用户显示进度条并防止在保存过程中对UI进行任何更改.我想我已经捕获了基本功能.模态ProgressWindow显示进度条而不是其他.async-await如果必须的话,我将如何将其更改为模式?

private ProgressForm ProgressWindow { get; set; }

/// <summary>On clicking save button, save stuff to file</summary>
void SaveButtonClick(object sender, EventArgs e)
{
  if (SaveFileDialog.ShowDialog() == DialogResult.OK)
  {
    if (!BackgroundWorker.IsBusy)
    {
      BackgroundWorker.RunWorkerAsync(SaveFileDialog.FileName);
      ProgressWindow= new ProgressForm();
      ProgressWindow.SetPercentageDone(0);
      ProgressWindow.ShowDialog(this);
    }
  }
}

/// <summary>Background worker task to save stuff to file</summary>
void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e)
{
  string path= e.Argument as string;

  // open file

  for (int i=0; i < 100; i++)
  {
    // get some stuff from …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker winforms async-await

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

将字节连接成整数或短保留符号

我知道我可以从int中提取字节,如下所示:

bytes[] IntToBytes(int i)
{
  return new byte [] {(byte) ((i >> 8) & 0xff), (byte) (i & 0xff)};
}
Run Code Online (Sandbox Code Playgroud)

我随后作为串行传输的一部分发送.但是,在收到字节序列后,我可以反过来重建原始数据,保留符号.目前,我这样做,但感觉有点超过顶部:

int BytesToInt( byte hi, byte lo)
{
  return ((hi << 24) | (lo << 16)) >> 16;
}
Run Code Online (Sandbox Code Playgroud)

还有其他方式或更好的方法吗?如果我知道我最终只处理签名的16位数据,它会有所作为吗?

c#

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

如何交换字符串中的字符

你要告诉我这很简单,我知道,但是如何将所有A同时更改为B,将所有B同时更改为A,字符串为s.

s= s.Replace( 'A', 'B').Replace( 'B', 'A');
Run Code Online (Sandbox Code Playgroud)

显然不太合适,那么正确的方法是什么?

c#

5
推荐指数
2
解决办法
9524
查看次数

标签 统计

c# ×3

async-await ×1

backgroundworker ×1

winforms ×1