private bool displayed;
private void PostMessage()
{
for (int i = 0; i < ScrollLabel._lines.Length; i++)
{
for (int x = 0; x < WordsList.words.Length; x++)
{
if (ScrollLabel._lines[i].Contains(WordsList.words[x]) && !displayed)
{
displayed = true;
lineToPost = ScrollLabel._lines[i];
PostFacebookWall(LongaccessToken, lineToPost + Environment.NewLine + Environment.NewLine + "נשלח באופן אוטומטי כניסיון דרך תוכנה");
}
}
}
}
我每秒都会在计时器刻度事件中调用此方法。
但如果变量字符串lineToPost
相同,则不会再次发送它。
但可能是lineToPost
可能包含完全相同的单词,但整条线不一样,所以我想发送它。
只有整行都相同,才能制作postFacebookWall
如果整行不相同,但同一个单词是与其他行相同的行,则使用PostFacebookWall
方法。
我正在使用bool
变量,因此它不会一遍又一遍地发送相同的行。
问题是我现在使用bool
的方式,它会发送一行,然后根本不会发送任何其他行。
答案 0 :(得分:1)
假设我理解了您的问题,您可以存储已发送的行以检测没有更改。
// key: line index, value: sent line
private Dictionary<int, string> sent = new Dictionary<int, string>();
private void PostMessage()
{
for (int i = 0; i < ScrollLabel._lines.Length; i++)
{
var line = ScrollLabel._lines[i];
if(sent.ContainsKey(i) && sent[i] == line) continue;
sent[i] = line;
if (WordsList.Any(line.Contains))
PostFacebookWall(LongaccessToken, line + Environment.NewLine + Environment.NewLine
+ "נשלח באופן אוטומטי כניסיון דרך תוכנה");
}
}
答案 1 :(得分:0)
也许我会监督某些事情,但我只记得字符串变量中的最后一行,如果当前行与最后一行不同,则只执行内部for循环。
答案 2 :(得分:0)
这似乎非常适合Reactive Extensions。使用Rx,您可以将线的推送与实际的发送操作分离。
你可能会有一个暴露IObservable<Line>
的类和另一个负责发送的类。在发件人中,您将订阅observable,声明只有当新行与最后一行不同时才需要新行。您可以使用DistinctUntilChanged
。
Rx是一个复杂的框架,可以理解。如果这是某种玩具示例并且您不了解Rx,我可能会保留其他一个已发布的解决方案。如果这是一个更严肃/专业的工作,我会彻底考虑这个方法,因为它很多更优雅,更容易实现和维护。