private void LoadSearchResults()
        {
            GUIUtils.SetProperty("#Trakt.Items", string.Empty);

            GUIBackgroundTask.Instance.ExecuteInBackgroundAndCallback(() =>
            {
                // People can be null if invoking search from loading parameters
                // Internally we set the People to load
                if (People == null && !string.IsNullOrEmpty(SearchTerm))
                {
                    // search online
                    if (!IsMultiPersonSearch)
                    {
                        People = TraktAPI.TraktAPI.SearchPeople(SearchTerm);
                    }
                    else
                    {
                        // do a search for all people in parallel
                        var threads = new List <Thread>();

                        foreach (string person in SearchTerm.FromJSON <PersonSearch>().People)
                        {
                            var tPersonSearch = new Thread((obj) =>
                            {
                                var result = TraktAPI.TraktAPI.SearchPeople(obj as string, 1);
                                lock (sync)
                                {
                                    if (People == null)
                                    {
                                        People = result;
                                    }
                                    else
                                    {
                                        People = People.Union(result);
                                    }
                                }
                            });

                            tPersonSearch.Start(person);
                            tPersonSearch.Name = "Search";
                            threads.Add(tPersonSearch);
                        }

                        // wait until all search results are back
                        threads.ForEach(t => t.Join());
                    }
                }
                return(People);
            },
                                                                      delegate(bool success, object result)
            {
                if (success)
                {
                    var people = result as IEnumerable <TraktPersonSummary>;
                    SendSearchResultsToFacade(people);
                }
            }, Translation.GettingSearchResults, true);
        }
        private void InitProperties()
        {
            // set search term from loading parameter
            if (!string.IsNullOrEmpty(_loadParameter))
            {
                TraktLogger.Debug("Person Search Loading Parameter: {0}", _loadParameter);
                SearchTerm = _loadParameter;

                // check if the searchterm is a list of people
                if (SearchTerm.StartsWith("{") && SearchTerm.EndsWith("}"))
                {
                    IsMultiPersonSearch = true;
                    // multi-person search will most likely have fanart as its attached
                    // to a movie, show or episode.
                    string fanart = SearchTerm.FromJSON <PersonSearch>().Fanart;
                    if (File.Exists(fanart))
                    {
                        GUIUtils.SetProperty("#Trakt.People.Fanart", fanart);
                    }
                }
            }

            // remember previous search term
            SearchTermChanged = false;
            if (PreviousSearchTerm != SearchTerm)
            {
                SearchTermChanged = true;
            }
            PreviousSearchTerm = SearchTerm;

            // set context property
            if (!IsMultiPersonSearch)
            {
                GUIUtils.SetProperty("#Trakt.Search.SearchTerm", SearchTerm);
            }
            else
            {
                GUIUtils.SetProperty("#Trakt.Search.SearchTerm", SearchTerm.FromJSON <PersonSearch>().Title);
            }

            // load last layout
            CurrentLayout = (Layout)TraktSettings.SearchPeopleDefaultLayout;

            // update button label
            if (layoutButton != null)
            {
                GUIControl.SetControlLabel(GetID, layoutButton.GetID, GUICommon.GetLayoutTranslation(CurrentLayout));
            }
        }