/// <summary> /// Sends the message to all recipients. /// </summary> /// <param name="keepWindowOpen">Set to true to keep the window open, else the window will close.</param> private void SendMessage(bool keepWindowOpen) { System.Messaging.Message[] messages = null; bool success = false; try { //check the license allows the operation if (_license.ValidateFeatureUse(_mode == Mode.NewMessage ? Licensing.Feature.NewMessage : Licensing.Feature.FowardMessage)) { //generate an array of all target queues System.Messaging.MessageQueue[] messageQueues = new System.Messaging.MessageQueue[recipientsListView.Items.Count]; for (int i = 0; i < recipientsListView.Items.Count; i++) { messageQueues[i] = (System.Messaging.MessageQueue)((QSetQueueItem)recipientsListView.Items[i].Tag).QSetMessageQueue; } //create a new message, or prepare existing ones, to send to recipients if (_mode == Mode.NewMessage) { //create the message from the releavent source messages = new System.Messaging.Message[1] { new System.Messaging.Message() }; FillMessageBody(messages[0]); messages[0].Label = labelTextBox.Text; //set message options messages[0].Recoverable = optionsRecoverableMenuItem.Checked; messages[0].UseAuthentication = optionsUseAuthenticationMenuItem.Checked; messages[0].UseDeadLetterQueue = optionsUseDeadLetterQueueMenuItem.Checked; messages[0].UseEncryption = optionsUseEncryptionMenuItem.Checked; messages[0].UseJournalQueue = optionsUseJournalQueueMenuItem.Checked; messages[0].UseTracing = optionsUseTracingMenuItem.Checked; messages[0].Priority = GetSelectedMessagePriority(); } else { //prepare existing messages... messages = new System.Messaging.Message[messagesListView.Items.Count]; for (int i = 0; i < messagesListView.Items.Count; i++) { messages[i] = _queueTaskManager.DuplicateMessage(_sourceQueueItem.QSetMessageQueue, ((System.Messaging.Message)messagesListView.Items[i].Tag).Id); } } if (keepWindowOpen) { Cursor = Cursors.WaitCursor; } else { this.Hide(); } //send the messages foreach (System.Messaging.Message message in messages) { _queueTaskManager.BulkSend(messageQueues, message, Convert.ToInt32(numberOfCopiesComboBoxItem.ComboBox.Text)); } success = true; } } catch (Exception exc) { MessageBox.Show( this, string.Format("Encountered an error while preparing to send message:\n\n{0}", exc.Message), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } finally { if (_mode == Mode.NewMessage && messages != null) { foreach (System.Messaging.Message message in messages) { message.Dispose(); } } Cursor = Cursors.Default; if (!keepWindowOpen && success) { DialogResult = DialogResult.OK; this.Close(); } } }