Click here to Skip to main content
15,881,248 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
C#
    public interface IUFDHelper
    {
        IList<string> ufdDriveList { get; set; }
        ManagementScope scope { get; set; }
        WqlEventQuery query { get; set; }
        ManagementEventWatcher watcher { get; set; }
        ManagementObjectSearcher searcher { get; set; }
        IList<string> MediaConnectWatcher_EventArrived(object sender, EventArrivedEventArgs e);
    }
</string></string>


C#
public class UFDDetect : IUFDHelper
    {
        #region Private Mambers
        private IList<string> _driveList;
        private ManagementScope _scope;
        private WqlEventQuery _query;
        private ManagementEventWatcher _watch;
        private ManagementObjectSearcher _searcher;
        #endregion
        #region interface mambers
        public IList<string> ufdDriveList
        {
            get
            {
                return _driveList;
            }
            set
            {
                _driveList = value;
            }
        }
        public System.Management.ManagementScope scope
        {
            get
            {
                return _scope;
            }
            set
            {
                _scope = value;
            }
        }
        public System.Management.WqlEventQuery query
        {
            get
            {
                return _query;
            }
            set
            {
                _query = value;
            }
        }
        public System.Management.ManagementEventWatcher watcher
        {
            get
            {
                return _watch;
            }
            set
            {
                _watch = value;
            }
        }
        public System.Management.ManagementObjectSearcher searcher
        {
            get
            {
                return _searcher;
            }
            set
            {
                _searcher = value;
            }
        }
        public UFDDetect()
        {
            Console.WriteLine("Thread ID is Class :-{0}\n\n", Thread.CurrentThread.ManagedThreadId.ToString());
            ufdDriveList = new List<string>();
            scope = new ManagementScope("root\\CIMV2");
            query = new WqlEventQuery();
            query.EventClassName = "__InstanceOperationEvent";
            query.WithinInterval = new TimeSpan(0, 0, 1);
            query.Condition = @"TargetInstance ISA 'Win32_USBControllerdevice'";
            watcher = new ManagementEventWatcher(scope, query);
        }
        public IList<string> MediaConnectWatcher_EventArrived(object sender, System.Management.EventArrivedEventArgs e)
        {
            Console.WriteLine("Thread ID is Class :-{0}\n\n", Thread.CurrentThread.ManagedThreadId.ToString());
            searcher = new
            ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
            ufdDriveList.Clear();
            foreach (ManagementObject s in searcher.Get())
            {
                if (Convert.ToInt16(s["DriveType"]) == 2)
                {
                    ufdDriveList.Add(s["Name"].ToString());
                }
            }
            return ufdDriveList;
        }
        #endregion
    }
</string></string></string></string>


C#
 public partial class frmHome : Form
 {
   IUFDHelper ufdhelper;
   public frmHome()
        {
            InitializeComponent();
            appPath = Path.GetDirectoryName(Application.ExecutablePath);
            //_UFD.FoundUsb+=new clsUFDrelatedWork.DeviceFound(_UFD_FoundUsb);
            //_UFD.StartDetection();
            ufdhelper = new UFDDetect();
            ufdhelper.watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            ufdhelper.watcher.Start();
        }
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            Console.WriteLine("Thread ID is Main :-{0}\n\n", Thread.CurrentThread.ManagedThreadId.ToString());
            IList<string> driveName = ufdhelper.MediaConnectWatcher_EventArrived(sender, e);

//this line gives the exception 

            toolSubMn1ConfigUFD.Enabled =
                    toolSubMn2UplaodManageFlahsfiles.Enabled =
                    toolSubMn3ManageDownLoadFiles.Enabled = (driveName.Count > 0 ? true : false);
        }
   }
</string>
Posted
Comments
Sergey Alexandrovich Kryukov 1-Aug-11 3:07am    
No exception information provided.
--SA
CS2011 1-Aug-11 3:09am    
It gives "gives cross thread exception" saying controls created on other thread can not be accessed from. but only 1 out of 10 times. i am unable to understand why ? all the thread is's are same when i check it.
DaveyM69 1-Aug-11 9:32am    
Wrap the code in your watcher_EventArrived method in a try catch and inspect the thread ID in the catch as I suspect it will be different when the exception is thrown.
If so, refactor your code and check toolSubMn1ConfigUFD's InvokeRequired property and invoke accordingly.

1 solution

Hi ,

As per review your code,
exception is generated by this section.
VB
toolSubMn1ConfigUFD.Enabled =
                    toolSubMn2UplaodManageFlahsfiles.Enabled =
                    toolSubMn3ManageDownLoadFiles.Enabled = (driveName.Count > 0 ? true : false);


So Use you need it to marshal with UI thread. You can refer this link.
http://stackoverflow.com/questions/3045941/how-can-solve-cross-thread-operation-not-valid
 
Share this answer
 
Comments
CS2011 1-Aug-11 7:56am    
well i know that invoke will do the job but my problem is it works fine without invoke also only some time it gives error and i am not sure why its doing that. Any ways thanks for you answer

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900