听起来对我来说更像是一个架构挑战。
我建议使用Queue。这是一种遵循先进先出(FIFO) 方法的集合类型。您将对象放入队列并以相同的顺序将它们取出。从此队列中接收到的对象会自动从队列中删除,因此您可以确保不会两次处理相同的元素。
然后,您描述的工作流程将按照以下简单步骤工作:
- 每当有消息到达时,您就将对象放入您的队列中。
- 当管理员单击 时
next button
,您请求队列中的第一个对象。
- 您的管理员执行他的管理任务并批准消息。
- 再次单击
Next
从上述项目 1 开始。
[编辑]
糟糕,我意识到我的Queue
方法不允许导航回以前的项目。
在这种情况下,我建议使用一个简单的List
集合。可以通过列表中基于 0 的位置访问此列表。这使得实现向前/向后导航变得容易。
对于我的示例代码,请记住,我对您的环境有很多不了解的地方,所以我的代码在这里做了很多假设。
您需要在某个地方存储一个包含要批准的消息的集合:
private IList<videomessage> _messagesToApprove = new List<videomessage>();
您还需要一些变量来跟踪集合中的当前位置:
// Store the index of the current message
// Initial value depends on your environment. :-)
private int _currentIndex = 0;
首先,您需要一个将新消息添加到该集合的起点,例如订阅某个事件左右。每当消息到达时,通过调用如下方法将其添加到集合中:
// I made this method up because I do not know where your messages really come from.
// => ADJUST TO YOUR NEEDS.
private void onNewMessageArriving(string messageId)
{
videomessage arrivingMessage = new videomessage(messageId);
_messagesToApprove.Add(arrivingMessage);
}
您可以通过增加/减少位置索引轻松实现导航:
private void previous_Click(object sender, EventArgs e)
{
// Check that we do not go back further than the beginning of the list
if ((_currentIndex - 1) >= 0)
{
_currentIndex--;
this.currentMessage = this._messagesToApprove[_currentIndex];
}
else
{
// Do nothing if the position would be invalid
return;
}
}
private void next_Click(object sender, EventArgs e)
{
// Check if we have new messages to approve in our list.
if ((_currentIndex + 1) < _messagesToApprove.Count)
{
_currentIndex++;
currentMessage = _messagesToApprove[_currentIndex];
}
else
{
// Do nothing if the position would be invalid
return;
}
}
private void approve_Click(object sender, EventArgs e)
{
// Sorry, I don't know where exactly this comes from, needs to be adjusted to your environment
status.SelectedValue = "1";
this.currentMessage.status = "1";
this.currentMessage.Save();
// If you want to remove items that have been checked by the admin, delete it from the approval list.
// Otherwise remove this line :-)
this._messagesToApprove.RemoveAt(_currentIndex);
}
private void remove_Click(object sender, EventArgs e)
{
// Sorry, I don't know where exactly this comes from, needs to be adjusted to your environment
status.SelectedValue = "2";
this.currentMessage.status = "2";
this.currentMessage.Save();
// If you want to remove items that have been checked by the admin, delete it from the approval list.
// Otherwise remove this line :-)
this._messagesToApprove.RemoveAt(_currentIndex);
}