Как поднять кросс-нить - PullRequest
       2

Как поднять кросс-нить

4 голосов
/ 08 декабря 2011

Как я могу вызвать событие GeocodeAddressEventHandler из другого потока?

    System.Threading.Thread MapThread;
    WinformMap map ;

    public delegate void GeocodeAddressEventHandler(object sender, EventArgs e);
    public event GeocodeAddressEventHandler GeocodeAddressEvent;

    //How to Raise this Event from another thread??
    public void GeocodeAddress_Raised(object sender, EventArgs e)
    {
        MapLib.GeocodeAddress("12798 1ST ST", "", "", "");
    }

    public bool LoadMap(string restorepoint)
    {
        ////////////////////////Engine Controls////////////////////////////////////////////////////////
        try
        {
            System.ServiceModel.OperationContext context = System.ServiceModel.OperationContext.Current;

            //This is to instantiate a winform from a Console (will convert to service shortly) 
            MapThread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate
            {
                using (System.ServiceModel.OperationContextScope scope = new System.ServiceModel.OperationContextScope(context))
                {
this.GeocodeAddressEvent += new GeocodeAddressEventHandler(GeocodeAddress_Raised);
                 }
            }));
            MapThread.SetApartmentState(System.Threading.ApartmentState.STA);
            MapThread.Start();
            MapThread.Join();
        }
        catch (Exception ex)
        {
            return false;
        }

        return true; 
    }

На самом деле оказалось, что поток завершается после завершения области действия делегата. Это может быть глупым способом сделать это, но я поместил некоторое время Queue.empty {sleep} в эту область, чтобы он никогда не завершался, затем я запустил LoadMap из еще одного потока, чтобы он заклинило мою службу WCF, ожидая бесконечная очередь до конца.

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011
3 голосов
/ 08 декабря 2011

Взгляните на метод Invoke():

http://msdn.microsoft.com/library/zyzhdc6b.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...