代码之家  ›  专栏  ›  技术社区  ›  Charlie Gevious

Compact框架上线程的AsyncCallback

  •  3
  • Charlie Gevious  · 技术社区  · 15 年前

    我需要在一个紧凑的框架应用程序中实现线程以提高加载时间。我想启动一个后台线程来执行一些对外部API的调用,而主线程缓存一些表单。当后台线程完成后,我需要再启动两个线程来填充数据缓存。

    我需要后台线程能够执行回调方法,这样我就知道已经完成了,接下来的两个线程可以启动了,但是在紧凑框架中委托上的BeginInvoke方法不受支持,那么我还能怎么做呢?

    2 回复  |  直到 11 年前
        1
  •  3
  •   Henk Holterman    15 年前

    您可以自己安排,只要确保线程方法在完成后调用完成的方法(或事件)。

    因为CF也不支持参数化的threadstart,所以我做了一个小助手类。

    以下为提取物,未重新测试:

    //untested
    public abstract class BgHelper
    {
        public System.Exception Error { get; private set; }
        public System.Object State { get; private set; }
    
        public void RunMe(object state)
        {
            this.State = state;
            this.Error = null;
    
            ThreadStart starter = new ThreadStart(Run);
            Thread t = new Thread(starter);
            t.Start();            
        }
    
        private void Run()
        {
            try
            {
                DoWork();                
            }
            catch (Exception ex)
            {
                Error = ex;
            }
            Completed(); // should check Error first
        }
    
        protected abstract void DoWork() ;
    
        protected abstract void Completed();
    }
    

    你必须继承和执行嫁妆并完成。将A<T>用于国有资产可能是有意义的,只是注意到了这一点。

        2
  •  1
  •   pungggi    11 年前

    我知道这是一个古老的问题,但如果您使用的是CF 3.5,这将是一个很好的简短的问题解决方案。使用lambda委托..

    ThreadStart starter = () => DoWorkMethodWithParams( param1, param2);
    Thread myNewThread = new Thread(starter){IsBackground = true};
    myNewThread.Start();