Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Messaging / System / Messaging / Design / QueuePathDialog.cs / 1305376 / QueuePathDialog.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Messaging.Design { using System.Messaging; using System.Threading; using System.ComponentModel; using System.ComponentModel.Design; using System.Diagnostics; using System; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.Design; using System.Windows.Forms.ComponentModel; using System.Messaging.Interop; using System.Collections; using System.Text; using System.Globalization; ////// /// /// public class QueuePathDialog : Form { private static readonly string HELP_KEYWORD = "System.Messaging.Design.QueuePathDialog"; private System.Windows.Forms.ImageList icons; private System.Windows.Forms.Button okButton; private System.Windows.Forms.ComboBox pathType; private System.Windows.Forms.TreeView enterprise; private System.Windows.Forms.Button helpButton; private System.Windows.Forms.Label selectLabel; private System.Windows.Forms.Label referenceLabel; private System.Windows.Forms.Button cancelButton; private string path = String.Empty; private string queuePath = String.Empty; private int lastPathType = 0; private bool exit; private MessageQueue selectedQueue; private delegate void FinishPopulateDelegate(MessageQueue[] queues); private delegate void SelectQueueDelegate(MessageQueue queue, int pathTypeIndex); private delegate void ShowErrorDelegate(); private IUIService uiService; private IServiceProvider provider; private Hashtable machinesTable = new Hashtable(); private Thread populateThread = null; private bool closed = false; private bool populateThreadRan = false; //Path prefixes private static readonly string PREFIX_LABEL = "LABEL:"; private static readonly string PREFIX_FORMAT_NAME = "FORMATNAME:"; ////// /// Creates a path editor control. /// This will create also a tree view control, and an ImageList with /// the icons. /// public QueuePathDialog(IServiceProvider provider) : base() { this.uiService = (IUIService)provider.GetService(typeof(IUIService)); this.provider = provider; this.InitializeComponent(); } ////// /// Creates a path editor control. /// This will create also a tree view control, and an ImageList with /// the icons. /// public QueuePathDialog(IUIService uiService) : base() { this.uiService = uiService; this.InitializeComponent(); } ////// /// public string Path { get { return this.queuePath; } } private void AfterSelect(object source, TreeViewEventArgs e) { TreeNode node = (TreeNode)e.Node; string[] nodeTexts = node.FullPath.Split(new char[]{'\\'}); if (nodeTexts.Length == 2) { StringBuilder path = new StringBuilder(); path.Append(node.Parent.Text); path.Append("\\"); path.Append(nodeTexts[1]); this.path = path.ToString(); ChoosePath(); exit = true; } } private void BeforeSelect(object source, TreeViewCancelEventArgs e) { TreeNode node = e.Node; string[] nodeTexts = node.FullPath.Split(new char[]{'\\'}); node.SelectedImageIndex = nodeTexts.Length - 1; exit = false; } ///[To be supplied.] ////// /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2102:CatchNonClsCompliantExceptionsInGeneralHandlers")] public void ChoosePath() { if (this.path != null && this.path != String.Empty) { if (pathType.Text.CompareTo(Res.GetString(Res.RefByPath)) == 0) { this.queuePath = this.path; this.lastPathType = this.pathType.SelectedIndex; } else if (pathType.Text.CompareTo(Res.GetString(Res.RefByFormatName)) == 0) { MessageQueue queue = new MessageQueue(this.path); this.queuePath = PREFIX_FORMAT_NAME + queue.FormatName; this.lastPathType = this.pathType.SelectedIndex; } else { MessageQueue queue = new MessageQueue(this.path); string tempPath = PREFIX_LABEL + queue.Label; try { MessageQueue validate = new MessageQueue(tempPath); string stringValidate = validate.FormatName; this.queuePath = tempPath; this.lastPathType = this.pathType.SelectedIndex; } // validate.FormatName can result in a deep stack, making it diffucult // to enumerate all exception types that can be thrown. At the same time, // we dont want to catch non-CLS exceptions to make users aware of them // (since this is design time). Hence, SuppressMessage above catch (Exception e) { if (this.queuePath != null && String.Compare(this.queuePath, tempPath, true, CultureInfo.InvariantCulture) != 0) { exit = false; if (uiService != null) uiService.ShowError(e.Message); else MessageBox.Show(e.Message, String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Error); if (this.queuePath == String.Empty) { this.queuePath = this.path; this.lastPathType = 0; } OnSelectQueue(new MessageQueue(this.queuePath), this.lastPathType); } } } } } ///[To be supplied.] ////// /// // Supressing FxCop violations since it is breaking change [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")] public void DoubleClicked(object source, EventArgs e) { if (exit) { this.Close(); this.DialogResult = DialogResult.OK; } } private void IndexChanged(object source, EventArgs e) { ChoosePath(); } private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(QueuePathDialog)); this.icons = new ImageList(); this.okButton = new System.Windows.Forms.Button(); this.pathType = new System.Windows.Forms.ComboBox(); this.enterprise = new System.Windows.Forms.TreeView(); this.helpButton = new System.Windows.Forms.Button(); this.selectLabel = new System.Windows.Forms.Label(); this.referenceLabel = new System.Windows.Forms.Label(); this.cancelButton = new System.Windows.Forms.Button(); this.okButton.Location = ((System.Drawing.Point)(resources.GetObject("okButton.Location"))); this.okButton.Size = ((System.Drawing.Size)(resources.GetObject("okButton.Size"))); this.okButton.TabIndex = ((int)(resources.GetObject("okButton.TabIndex"))); this.okButton.Text = resources.GetString("okButton.Text"); this.okButton.DialogResult = DialogResult.OK; this.pathType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.pathType.DropDownWidth = 264; this.pathType.Items.Add(Res.GetString(Res.RefByPath)); this.pathType.Items.Add(Res.GetString(Res.RefByFormatName)); this.pathType.Items.Add(Res.GetString(Res.RefByLabel)); this.pathType.SelectedIndex = 0; this.pathType.Location = ((System.Drawing.Point)(resources.GetObject("pathType.Location"))); this.pathType.Size = ((System.Drawing.Size)(resources.GetObject("pathType.Size"))); this.pathType.TabIndex = ((int)(resources.GetObject("pathType.TabIndex"))); this.pathType.SelectedIndexChanged += new System.EventHandler(this.IndexChanged); this.enterprise.HideSelection = false; this.enterprise.ImageIndex = -1; this.enterprise.Location = ((System.Drawing.Point)(resources.GetObject("enterprise.Location"))); this.enterprise.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {new System.Windows.Forms.TreeNode(Res.GetString(Res.PleaseWait))}); this.enterprise.SelectedImageIndex = -1; this.enterprise.Size = ((System.Drawing.Size)(resources.GetObject("enterprise.Size"))); this.enterprise.Sorted = true; this.enterprise.TabIndex = ((int)(resources.GetObject("enterprise.TabIndex"))); this.enterprise.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.AfterSelect); this.enterprise.BeforeSelect += new System.Windows.Forms.TreeViewCancelEventHandler(this.BeforeSelect); this.enterprise.DoubleClick += new System.EventHandler(this.DoubleClicked); this.enterprise.ImageList = icons; this.helpButton.Location = ((System.Drawing.Point)(resources.GetObject("helpButton.Location"))); this.helpButton.Size = ((System.Drawing.Size)(resources.GetObject("helpButton.Size"))); this.helpButton.TabIndex = ((int)(resources.GetObject("helpButton.TabIndex"))); this.helpButton.Text = resources.GetString("helpButton.Text"); this.helpButton.Click += new System.EventHandler(this.OnClickHelpButton); this.icons.Images.Add(new Bitmap(typeof(MessageQueue), "Machine.bmp")); this.icons.Images.Add(new Bitmap(typeof(MessageQueue), "PublicQueue.bmp")); this.selectLabel.Location = ((System.Drawing.Point)(resources.GetObject("selectLabel.Location"))); this.selectLabel.Size = ((System.Drawing.Size)(resources.GetObject("selectLabel.Size"))); this.selectLabel.TabIndex = ((int)(resources.GetObject("selectLabel.TabIndex"))); this.selectLabel.Text = resources.GetString("selectLabel.Text"); this.referenceLabel.Location = ((System.Drawing.Point)(resources.GetObject("referenceLabel.Location"))); this.referenceLabel.Size = ((System.Drawing.Size)(resources.GetObject("referenceLabel.Size"))); this.referenceLabel.TabIndex = ((int)(resources.GetObject("referenceLabel.TabIndex"))); this.referenceLabel.Text = resources.GetString("referenceLabel.Text"); this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancelButton.Location = ((System.Drawing.Point)(resources.GetObject("cancelButton.Location"))); this.cancelButton.Size = ((System.Drawing.Size)(resources.GetObject("cancelButton.Size"))); this.cancelButton.TabIndex = ((int)(resources.GetObject("cancelButton.TabIndex"))); this.cancelButton.Text = resources.GetString("cancelButton.Text"); this.cancelButton.DialogResult = DialogResult.Cancel; this.HelpRequested += new HelpEventHandler(this.OnHelpRequested); this.AcceptButton = this.okButton; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleDimensions = new System.Drawing.SizeF(6.0F, 14.0F); this.CancelButton = this.cancelButton; this.ClientSize = ((System.Drawing.Size)(resources.GetObject("$this.ClientSize"))); this.Controls.AddRange(new System.Windows.Forms.Control[] {this.helpButton, this.cancelButton, this.okButton, this.pathType, this.referenceLabel, this.enterprise, this.selectLabel}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "Win32Form1"; this.ShowInTaskbar = false; this.StartPosition = FormStartPosition.CenterParent; this.Text = resources.GetString("$this.Text"); this.lastPathType = 0; this.Icon = null; } // PopulateThread calls BeginInvoke in case of failure. BeginInvoke requires window handle // to exist for this Form. Therefore, PopulateThread can be called safely only after handle is created // Call it in OnHandleCreated event handler private void PopulateThread() { try { IEnumerator messageQueues = MessageQueue.GetMessageQueueEnumerator(); bool locate = true; while (locate) { MessageQueue[] queues = new MessageQueue[100]; for (int index = 0; index < queues.Length; ++index) { if (messageQueues.MoveNext()) queues[index] = (MessageQueue)messageQueues.Current; else { queues[index] = null; locate = false; } } this.BeginInvoke(new FinishPopulateDelegate(this.OnPopulateTreeview), new object[]{queues}); } } catch { if (!this.closed) this.BeginInvoke(new ShowErrorDelegate(this.OnShowError), null); } if (!this.closed) this.BeginInvoke(new SelectQueueDelegate(this.OnSelectQueue), new object[]{this.selectedQueue, 0}); } ///[To be supplied.] ////// /// public void SelectQueue(MessageQueue queue) { this.selectedQueue = queue; } private void OnHelpRequested(object sender, HelpEventArgs e) { OnClickHelpButton(null, null); } private void OnClickHelpButton(object source, EventArgs e) { if (this.provider != null) { IHelpService helpService = (IHelpService)provider.GetService(typeof(IHelpService)); if (helpService != null) { helpService.ShowHelpFromKeyword(HELP_KEYWORD); } } } protected override void OnFormClosing(FormClosingEventArgs e) { this.closed = true; if (populateThread != null) { populateThread.Abort(); } base.OnFormClosing(e); } protected override void OnHandleCreated(EventArgs e) { // Window handle has been created, so it's safe to call PopulateThread now. // However, OnHandleCreated can be called multiple times during Form's life-time. // So we need to ensure that PopulateThread runs only once. // ( [....] May 27 2005. Whidbey 463310 ) if (!populateThreadRan) { populateThreadRan = true; populateThread = new Thread(new ThreadStart(this.PopulateThread)); populateThread.Start(); } base.OnHandleCreated(e); } private void OnPopulateTreeview(MessageQueue[] queues) { if (queues == null || queues.Length == 0) { return; } if (machinesTable.Count == 0) enterprise.Nodes.Clear(); for (int index = 0; index < queues.Length; ++ index) { if (queues[index] != null) { string machineName = queues[index].MachineName; TreeNode machineNode = null; if (machinesTable.ContainsKey(machineName)) machineNode = (TreeNode)machinesTable[machineName]; else { machineNode = enterprise.Nodes.Add(machineName); machinesTable[machineName] = machineNode; } machineNode.Nodes.Add(queues[index].QueueName).ImageIndex = 1; } } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions")] private void OnShowError() { if (uiService != null) uiService.ShowError(Res.GetString(Res.QueueNetworkProblems)); else MessageBox.Show(Res.GetString(Res.QueueNetworkProblems), String.Empty, MessageBoxButtons.OK, MessageBoxIcon.Error); this.DialogResult = DialogResult.Cancel; this.Close(); } private void OnSelectQueue(MessageQueue queue, int pathTypeIndex) { try { pathType.SelectedIndex = pathTypeIndex; string machineName = queue.MachineName; string queueName = queue.QueueName; TreeNodeCollection machines = enterprise.Nodes; for (int index = 0; index < machines.Count; ++ index) { TreeNode machine = machines[index]; if ( String.Compare(machineName, machine.Text, true, CultureInfo.InvariantCulture) == 0) { machine.Expand(); //Need to flush all events so that the children nodes get added. Application.DoEvents(); TreeNodeCollection queues = machine.Nodes; for (int index2 = 0; index2 < queues.Count; ++ index2) { TreeNode queueNode = queues[index2]; if (queueNode.Text != null && String.Compare(queueName, queueNode.Text, true, CultureInfo.InvariantCulture) == 0) { enterprise.SelectedNode = queueNode; return; } } return; } } } catch { //Ignore all Exceptions. } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UpDownEvent.cs
- XmlDataSourceView.cs
- ColorMap.cs
- ProviderConnectionPointCollection.cs
- SignatureDescription.cs
- HtmlTextArea.cs
- DataGridCellsPanel.cs
- WebServiceErrorEvent.cs
- EntityDataSourceView.cs
- ListMarkerSourceInfo.cs
- ObjectSelectorEditor.cs
- SocketInformation.cs
- EdmSchemaError.cs
- ValidationHelper.cs
- HtmlInputText.cs
- ValueUtilsSmi.cs
- SkinBuilder.cs
- DbMetaDataCollectionNames.cs
- CodeCompileUnit.cs
- SingleStorage.cs
- _OSSOCK.cs
- RelationshipEndMember.cs
- X509Certificate.cs
- GridViewColumnCollection.cs
- SecurityDescriptor.cs
- SafeBitVector32.cs
- _TransmitFileOverlappedAsyncResult.cs
- XNameConverter.cs
- EdmTypeAttribute.cs
- CanonicalXml.cs
- IdentityNotMappedException.cs
- PkcsMisc.cs
- SqlStream.cs
- KeyboardEventArgs.cs
- XamlWriter.cs
- LinkedResource.cs
- AttributeAction.cs
- Header.cs
- PropertyEntry.cs
- TransportConfigurationTypeElementCollection.cs
- oledbmetadatacolumnnames.cs
- WindowAutomationPeer.cs
- TabItemAutomationPeer.cs
- CheckBox.cs
- WpfWebRequestHelper.cs
- StreamHelper.cs
- CounterSetInstanceCounterDataSet.cs
- HttpVersion.cs
- KeyConstraint.cs
- XmlSchemaChoice.cs
- WindowsAuthenticationModule.cs
- TextComposition.cs
- ComponentResourceKeyConverter.cs
- BasicExpressionVisitor.cs
- IItemProperties.cs
- exports.cs
- DataBindingList.cs
- HasCopySemanticsAttribute.cs
- StreamWriter.cs
- BoundingRectTracker.cs
- TypeElement.cs
- StaticFileHandler.cs
- DeclaredTypeValidator.cs
- StringComparer.cs
- Base64Decoder.cs
- WebPartDisplayModeCancelEventArgs.cs
- CodeDomConfigurationHandler.cs
- Asn1IntegerConverter.cs
- UserPersonalizationStateInfo.cs
- TimeSpanMinutesConverter.cs
- FtpRequestCacheValidator.cs
- MediaTimeline.cs
- HtmlInputSubmit.cs
- CompensationHandlingFilter.cs
- MenuItem.cs
- AssociationType.cs
- ClientWindowsAuthenticationMembershipProvider.cs
- CodePrimitiveExpression.cs
- TransportConfigurationTypeElementCollection.cs
- WindowsTreeView.cs
- WebControl.cs
- UriTemplateTrieNode.cs
- CryptoApi.cs
- SessionStateUtil.cs
- PagesSection.cs
- DeviceSpecificChoice.cs
- MsmqEncryptionAlgorithm.cs
- DataRecordInternal.cs
- RepeaterItemCollection.cs
- WebPartConnectVerb.cs
- IgnoreDataMemberAttribute.cs
- QilReplaceVisitor.cs
- ToolStripSeparator.cs
- XmlILConstructAnalyzer.cs
- ThaiBuddhistCalendar.cs
- WebSysDescriptionAttribute.cs
- StreamGeometry.cs
- StrongName.cs
- HasCopySemanticsAttribute.cs
- RuntimeCompatibilityAttribute.cs