你好,我有一个与许多后台工作人员的计划。那些后台工作人员只会倾听来自名为“tweet”的变量的变化,然后每个后台创建一个任务来处理每个“tweet”并准备处理另一个Tweet。物业变更通知C#
以下是Tweet类,每1秒钟更新一次或更少。
Tweet tweet = new Tweet();
public class Tweet : INotifyPropertyChanged
{
private ITweet lastTweet;
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
public ITweet LastTweet
{
get { return lastTweet; }
set
{
if (value != lastTweet)
{
lastTweet = value;
OnPropertyChanged("LastTweet");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
现在,在我的BackgroundWorker的DoWork实现:
Del OnNewTweetEvent = delegate(object sender2, PropertyChangedEventArgs args)
{
Task task = null;
task = new Task(() =>
{
var mytweet = sender2 as Tweet;
var tweetText = mytweet.LastTweet.Text;
//copy the tweetText in case the mytweet variable changed (not sure)
ProcessTweet(tweetText);
});
task.Start();
};
this.tweet.PropertyChanged += new PropertyChangedEventHandler(OnNewTweetEvent);
//wait and prepare for cancellation
var backgroundworker = sender as BackgroundWorker;
while (true)
{
Thread.Sleep(10);
if (backgroundworker.CancellationPending)
{
//remove the notification
this.tweet.PropertyChanged -= new PropertyChangedEventHandler(OnNewTweetEvent);
return;
}
}
}
这段代码的逻辑吗?如果tweets每0.01秒钟发送一次tweets,我能够将它们全部获得吗?或者,推特可能会改变,我的后台工作人员没有得到它?
有一个队列或更好的东西? 您的帮助表示赞赏。
感谢您的回复。你能否提供一些代码编辑到我当前的代码中,以最好的方式做到这一点? – circler
@circler:我添加了一个小样本。希望它有帮助。 – Markus
感谢您的代码。做一个集合的最好方法是什么,因为我想在后台工作中运行它,因为每个工作人员都有差异。 – circler