Exemplo n.º 1
0
 public WorkerThreadParams(Task t)
 {
     T     = t;
     State = WorkerThreadState.Loaded;
 }
Exemplo n.º 2
0
        public void StopWorkerThread()
        {
            if (_workerThread.IsAlive)
            {
                lock (_workerThreadSync)
                {
                    _messageQueue.Enqueue(Message.Stop());
                    _cancelSearch = true;
                    LocatorProject.CancelProjectLoad = true;
                    Monitor.Pulse(_workerThreadSync);
                }

                _workerThread.Join();
                _workerState = WorkerThreadState.NotStarted;
            }
        }
Exemplo n.º 3
0
        private void WorkerThreadFunc()
        {
            while (true)
            {
                Message message;
                lock (_workerThreadSync)
                {
                    while (_searchMessage == null && _messageQueue.Count == 0)
                    {
                        lock (_workerThreadIdle)
                        {
                            _workerState = WorkerThreadState.Idle;
                            Monitor.Pulse(_workerThreadIdle);
                        }
                        Monitor.Wait(_workerThreadSync);
                    }

                    _workerState = WorkerThreadState.Working;

                    if (_messageQueue.Count > 0)
                    {
                        message = _messageQueue.Dequeue();
                        LocatorProject.CancelProjectLoad = false;
                    }
                    else // search message must be set
                    {
                        message = _searchMessage;
                        _searchMessage = null;
                        _cancelSearch = false;
                    }
                }

                if (message.Type == MessageType.SearchString)
                {
                    string searchStr = message.Text.TrimStart();
                    Regex regex = new Regex(@"\.\s+(.*)");
                    Match match = regex.Match(searchStr);
                    if (match.Success)
                    {
                        searchStr = match.Groups[1].Value.ToUpper().TrimStart();
                        SearchCodeElements(searchStr);
                    }
                    else
                    {
                        if (searchStr.Length > 0)
                            SearchFilesInSolution(searchStr);
                        else
                            RaiseSearchResultEventInUserThread(SearchResultEventArgs.ResultType.Error, 0);
                    }
                }
                else if (message.Type == MessageType.ProjectLoaded)
                {
                    object obj;
                    string name;
                    int result = message.Hierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_Name, out obj);
                    if (result == VSConstants.S_OK)
                        name = obj as string;
                    else
                        name = string.Empty;

                    RaiseSolutionEventInUserThread(SolutionEventArgs.EventType.ProjectLoading, "Loading project " + name);
                    LocatorProject project = new LocatorProject(message.Hierarchy);
                    _projectList.Add(project);
                    RaiseSolutionEventInUserThread(SolutionEventArgs.EventType.ProjectFinishedLoading);
                }
                else if (message.Type == MessageType.ProjectUnloaded)
                {
                    object obj;
                    string name;
                    int result = message.Hierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_Name, out obj);
                    if (result == VSConstants.S_OK)
                        name = obj as string;
                    else
                        name = string.Empty;

                    RaiseSolutionEventInUserThread(SolutionEventArgs.EventType.ProjectUnloading, "Unloading project " + name);
                    _projectList.RemoveAll((LocatorProject prj) => {
                        if (prj.Hierarchy == message.Hierarchy)
                        {
                            prj.StopListeningEvents();
                            return true;
                        }
                        return false;
                    });
                    RaiseSolutionEventInUserThread(SolutionEventArgs.EventType.ProjectFinishedUnloading);
                }
                else if (message.Type == MessageType.Stop)
                {
                    lock (_workerThreadIdle)
                    {
                        _workerState = WorkerThreadState.Idle;
                        Monitor.Pulse(_workerThreadIdle);
                    }
                    break;
                }
            }
        }
Exemplo n.º 4
0
 public void StartWorkerThread()
 {
     if (!_workerThread.IsAlive)
     {
         _workerState = WorkerThreadState.Idle;
         _workerThread.Start();
     }
 }