因此,这就是我目前使用后台工作程序将大量内容保存到文件中的方式,同时向用户显示进度条并防止在保存过程中对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) 我知道我可以从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位数据,它会有所作为吗?
你要告诉我这很简单,我知道,但是如何将所有A同时更改为B,将所有B同时更改为A,字符串为s.
s= s.Replace( 'A', 'B').Replace( 'B', 'A');
Run Code Online (Sandbox Code Playgroud)
显然不太合适,那么正确的方法是什么?