private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while (true)
{
List<string> tempNamesAndTexts = new List<string>();
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
string content = downloadContent();
GetProfileNames(content);
GetTextFromProfile(content);
for (int i = 0; i < names.Count; i++)
{
tempNamesAndTexts.Add(names[i] + " " + texts[i]);
namesAndTexts.Add(names[i] + " " + texts[i]);
}
if (InvokeRequired)
{
bool result = tempNamesAndTexts.SequenceEqual(namesAndTexts);
if (result == true)
{
}
else
{
foreach (string com in tempNamesAndTexts)
{
if (!namesAndTexts.Contains(com))
{
MessageBox.Show(com);
}
}
//BeginInvoke(new Action(() => namesAndTexts.ForEach(Item => textBox1.AppendText(Item + Environment.NewLine))));
}
}
reader.Close();
response.Close();
Thread.Sleep(1000);
}
}
}
我在Form1级别有一个List namesAndTexts。 另一个临时本地List tempNamesAndTexts
我需要做的是在DoWork中使用DoWork中的两个功能每隔n秒从网站更新namesAndTexts。
最后,我有名字的名字和完成列表:
[0]丹尼尔你好 [1]摩西嗨
我需要将这个namesAndTexts与tempNamesAndTexts列表进行比较,每次更新List时如果它们是相同的则不做任何事情。
但如果它们不一样,那么在两个列表中找到didrenet,这个不同的部分只会添加到textBox。
现在的问题是,namesAndTexts一直在增长和增长18然后是36然后是72个索引,它会一遍又一遍地添加相同的字符串。
我需要做的是:
每隔n秒从网站下载一次内容(downloadContent();)
创建GetProfileNames函数的名称列表。
创建文本列表GetTextFromProfile函数。
在2.和3中创建两个列表的列表,其中包含名称和文本togeather。
将旧列表存储在4.以记住上次更新。
将上次更新与新更新进行比较。将5.中的List与4中的List进行比较。
如果比较结果为真,则不做任何事情。
如果比较不相同,则发现两个列表中的索引不相同并添加到textBox中列表中的字符串与另一个中的字符串不同。
所以textBox应该看起来像什么,首先将List添加到textBox,例如:
丹尼尔在这里 模式就在那里 丹妮拉出局了
比较后第二次如果它不相同,则发现索引/ s不相同,只将此索引中的字符串添加到textBox中。
所以现在textBox看起来像:
丹尼尔在这里 模式就在那里 丹妮拉出去了 亚伦你好
所以唯一的变化是Yaron地狱现在被添加到textBox。
但我无法弄清楚该怎么做。 无法使得这些数据的比较不相同并将它们删除并将它们添加到textBox中,无法弄清楚为什么其中一个列表会继续增长,因此在下一次迭代中这两个列表不相同但也没有新的索引将名称和文字添加到文本框中。
答案 0 :(得分:0)
您可以通过Exept
var list1 = new List<string> {"a", "b"};
var list2 = new List<string> {"a", "c"};
List<string> addedItems = list2.Except(list1).ToList();
addedItems.ForEach(x => Console.WriteLine("Added items: {0}", x));
List<string> removedItems = list1.Except(list2).ToList();
removedItems.ForEach(x => Console.WriteLine("Removed items: {0}", x));
控制台输出:
Added items: c
Removed items: b