首先在backgroundworker完成的活动中
numberoffiles = ExtractImages.imagesUrls.Count();
变量numberoffiles值是18我在行上使用断点:
long bytesFromCompletedFiles = 0;
private async void Completed(object sender, AsyncCompletedEventArgs e)
{
if (e.Cancelled == true)
{
MessageBox.Show("Download has been canceled.");
}
else
{
if (e.Error == null)
{
ProgressBar1.Value = 100;
count++;
bytesFromCompletedFiles += totalBytes[count - 1];
label9.Text = numberoffiles--.ToString();
await DownloadFile();
if (progressBar2.Value == 100)
{
label7.Text = "Download completed";
btnDownload.Enabled = true;
Reset();
if (israelDownload == false)
{
string[] list = Directory.GetFiles(countriesMainPath + "\\" + currentDownloadCountry,
"*infrared*.jpg");
sorted = list.Select(x => new {
Item = x,
Number = int.Parse(Regex.Match(x, "[0-9]+").Value)
})
.OrderBy(x => x.Number).Select(x => x.Item).ToArray();
timer1.Enabled = true;
}
}
}
else
{
string error = e.UserState.ToString();
}
}
sw.Stop();
}
然后在webclient完成事件:
class GifsController < ApplicationController
def index
if params[:tag]
@gifs = Gif.tagged_with(params[:tag])
elsif params[:search]
@gifs = Gif.search(params[:search])
else
@gifs = Gif.all
end
end
def show
@gif = Gif.find(params[:id])
end
def new
@gif = Gif.new
end
def create
@gif = Gif.new(gif_params)
@gif.save
redirect_to @gif
end
private
def gif_params
params.require(:gif).permit(:title, :link, :recipe, :all_tags, ingredients_attributes: [:id, :name, :_destroy], directions_attributes: [:id, :step, :_destroy])
end
end
imagesUrls is List包含18个项目。
我在做numberoffiles - .toString() 我最后看到我在硬盘上有18个文件。 但是numberoffiles中的值实际上是我在label9中看到的值是1 我希望它为0.计算出了问题。
答案 0 :(得分:2)
在numberoffiles - .toString()到label9.Text的赋值期间,该值仍为1.该值仅在赋值后递减,因为您使用了postfix减量操作。
递减运算符( - )将其操作数递减1.递减运算符可以出现在其操作数之前或之后: - 变量和变量 - 。
第一种形式是前缀减量操作。操作的结果是操作数的值“在”之后递减。
第二种形式是后缀减量操作。操作的结果是操作数“之前”的值已经减少。
Postfix减量操作(您的情况):
int counter = 1;
string text = counter--.ToString(); // text = 1
前缀递减操作(你应该使用的):
int counter = 1;
string text = (--counter).ToString(); // text = 0
所以在你的情况下它应该是:
label9.Text = (--numberoffiles).ToString();
尽管如此,我宁愿将减量和赋值操作拆分为单独的行,以提高可读性。
增加值:前缀和后缀减少的文本为0:
int counter = 1;
counter--;
string text = counter.ToString(); // text = 0