簡體   English   中英

如何引發跨線程事件

[英]How to raise cross thread event

如何從另一個線程中引發事件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服務等待無休止的隊列終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM