-1
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);
                }
            }
        }

我有一个List<string> namesAndTexts在 Form1 级别。另一个临时本地List<string> tempNamesAndTexts

我需要做的是在 DoWork 中,我每隔 n 秒使用 DoWork 中的两个函数从网站更新 namesAndTexts。

最后,我有 namesAndTexts 列表,例如:

[0] 丹尼尔你好
[1] 摩西你好

我需要将此 namesAndTexts 与 tempNamesAndTexts 列表进行比较,并且每次更新列表时,如果它们相同,则不执行任何操作。

但是,如果它们不一样,则在两个列表中找到不同的部分,而这个不同的部分只会添加到文本框中。

现在的问题是,namesAndTexts 一直在增长,然后增长 18,然后是 36,然后是 72 索引,它不断地一遍又一遍地添加相同的字符串。


我需要做的是:

  1. 每 n 秒从网站下载内容 (downloadContent();)

  2. 使用 GetProfileNames 函数创建名称列表。

  3. 创建一个文本列表 GetTextFromProfile 函数。

  4. 创建一个包含 2. 和 3. 中的两个列表的列表,其中包含名称和文本。

  5. 将旧列表存储在 4. 中以记住上次更新。

  6. 将上次更新与新更新进行比较。将 5 中的列表与 4 中的列表进行比较。

  7. 如果比较结果是真的相同,则不做任何事情。

  8. 如果比较不相同,则查找两个列表中的哪些索引不相同,并将列表中与另一个不同的字符串添加到文本框中。

所以文本框应该看起来像这样,首先将列表添加到文本框,例如:

丹尼尔来了
模式在那儿
丹妮拉出去了

比较后的第二次,如果它不相同,则查找哪个 index/s 不相同,并仅将此 index/s 中的字符串添加到 textBox。

所以现在文本框看起来像:

丹尼尔在
吗 模式在
吗 丹妮拉出去了
亚龙你好

所以唯一的变化是 Yaron hell 现在被添加到了 textBox 中。

但我不知道该怎么做。无法比较哪些索引不相同并将它们取出并将它们添加到 textBox 无法弄清楚为什么其中一个列表不断增长所以在下一次迭代中这两个列表不相同但也没有新的索引带有要添加到文本框中的名称和文本。

4

1 回答 1

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
于 2012-08-12T01:14:47.540 回答