小编Ada*_*ers的帖子

C#使用ArrayList.IndexOf和多个相同的项目

我有一种情况,我使用ArrayList来存储文件名列表(完整文件路径).当我向数组添加同一文件的多个项目时,使用ArrayList.IndexOf查找索引(我向BackgroundWorker报告进度),它总是返回第一个项目的索引,因为它按文件名搜索.这会导致进度条出现问题,即我正在处理3个文件,完成后,条形仅为1/3满.

这是一些示例代码(我只是在这里添加项目,但在实际代码中它们是从ListBox添加的):

ArrayList list = new ArrayList();

list.Add("C:\Test\TestFile1.txt");
list.Add("C:\Test\TestFile1.txt");
list.Add("C:\Test\TestFile1.txt");

var files = list;
foreach (string file in files)
    backgroundWorker1.ReportProgress(files.IndexOf(file) + 1);
Run Code Online (Sandbox Code Playgroud)

当此运行时,仅报告1"百分比"的进度,因为IndexOf每次都找到相同的文件.有没有办法解决?或者是否有人建议以另一种方式获取索引(或每个项目的任何唯一标识符)?

c# arraylist

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

如何在TStringList中获取最后一个字符串

我一直在寻找如何做到这一点的日子,没有什么是我需要做的(或者我只是不明白如何实现解决方案).

我需要做的是将一个字符串(一个街道地址)解析成TStringList,然后将这些字符串从列表中设置为变量然后传递给程序的其余部分.我已经把列表运行正常了:

var
AddressList : TStringList;
i : integer;

begin
AddressList := TStringList.Create;
AddressList.Delimiter := ' ';
AddressList.DelimitedText := RawAddressStr; //RawAddressStr is parsed from another file and the string result is something like '1234 Dark Souls Lane Wyoming, MI 48419'

for i := 0 to AddressList.Count-1 do
   AddressList.Strings[i]; //Not sure what to do here
Run Code Online (Sandbox Code Playgroud)

问题是地址长度不一样.地址有时候会像'1234 Dark Souls Two Lane Wyoming ......'或'1234 Dark Lane Wyoming ......'

所以我需要能够使用这个TStringList将Zip,State和City设置为变量供以后使用.我会使用TStringList.Find,但邮政编码并不总是相同.有没有办法获得最后一个字符串,然后从那里后退?(向后退,因为一旦我获得City,状态ZIP我可以从RawAddressStr中删除它,然后将其余部分设置为地址字符串.)

谢谢.

编辑,这是我需要的代码(感谢下面的评论):AddressList:= TStringList.Create;

AddressList.Delimiter := ' ';
AddressList.DelimitedText := RawAddressStr;

for i := 0 …
Run Code Online (Sandbox Code Playgroud)

delphi string tstringlist

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

C# - 使用 BackgroundWorker.ReportProgress 使用自定义最大值更新 ProgressBar

我已经在这个主题上搜索了几天,但我没有遇到任何似乎相关的东西。请记住,我仍在学习如何在 C# 中使用 BackgroundWorker 和多线程。

我在使用 ReportProgress 方法时遇到问题。这是我正在做的一个小例子。

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
  if (!backgroundWorker1.CancellationPending)
  {
    // bunch of code for handling a multiple-page PDF file using Ghostscript.NET
    for (var pageNumber = 1; pageNumber <= pageCount; pageNumber++)
    {
      if (!backgroundWorker1.CancellationPending)
      {
        // get file path and file name, convert page to image file
        // after converting page to image file do:
        backgroundWorker1.ReportProgress(pageNumber); // Here is the problem
      }
      else
        e.Cancel = true;
      ...
    }
  }
}

private void …
Run Code Online (Sandbox Code Playgroud)

.net c# backgroundworker

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

标签 统计

c# ×2

.net ×1

arraylist ×1

backgroundworker ×1

delphi ×1

string ×1

tstringlist ×1