を使用するの.Purge()
ではなく、定義された数のメッセージをキューから削除する方法はありますか?
現在のメッセージで必要なことをすべて行った後MessageEnumerator
、を設定して使用しようとし.RemoveCurrrent
ましたが、機能しないようです。
ありがとう
public Message[] Get10(MessageQueue q)
{
int counter = 0;
int mCount = 0;
List<Message> ml = new List<Message>();
try
{
MessageEnumerator me = q.GetMessageEnumerator2();
while (me.MoveNext())
{
counter++;
}
if (counter > 10)
{
mCount = 10;
}
else
{
mCount = counter;
}
counter = 0;
me.Reset();
do
{
me.MoveNext();
counter++;
ml.Add(me.Current);
me.RemoveCurrent();
} while (counter < mCount);
}
catch (Exception x)
{
Console.WriteLine(x.Message);
}
Message[] m = ml.ToArray();
return m;
}
を呼び出すRemoveCurrent()
と、列挙子は次のメッセージに移動します。を呼び出したMoveNext()
後に呼び出す必要はありませんRemoveCurrent()
。
あなたが試みるかもしれないもう一つのアプローチは次のようなものです:
List<Message> ml = new List<Message>();
int count = 0;
while( count < 10 ) {
ml.Add(me.RemoveCurrent());
++count;
}
この場合、RemoveCurrent
キューにメッセージが残っていない場合は永久に待機することに注意する必要があります。それが必要なものでない場合は、RemoveCurrent(TimeSpan timeout)
オーバーロードを使用してMessageQueueException
、タイムアウトの場合にスローされるものをキャッチすることをお勧めします。MessageQueueException
クラスが持っているMessageQueueErrorCode
に設定されているプロパティMessageQueueErrorCode.IOTimeout
のタイムアウトの有効期限が切れている場合を。
または(これは最大10個のメッセージを受け取ります:キュー内のメッセージ数がゼロになるとループは終了します):
List<Message> ml = new List<Message>();
int count = 0;
while( me.MoveNext() && count < 10 ) {
ml.Add(queue.ReceiveById(me.Current.Id));
++count;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加