首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

当主线程去访问一个静态类的方法,而刚好这个方法是要从网络上取得返回值的,这时会报错。那这个静态类方法里面应该怎么来写呢?万分感谢

2013-11-14 
当主线程去访问一个静态类的方法,而刚好这个方法是要从网络上取得返回值的,这时会报错。那这个静态类方法里

当主线程去访问一个静态类的方法,而刚好这个方法是要从网络上取得返回值的,这时会报错。那这个静态类方法里面应该如何来写呢?万分感谢
比如我有类


public static NetHelper
{
    public static getVersion()
    {
        int version = getNetVersion();//这里从网络上取得网上的版本
    }
}

上面的类在线程中调用是没有问题的,但在主线程调用就会出错
那在不更改主线程业务的情况下,
如何修改这个GetVersion方法,那他可以在主线程,也可以在子线程中调用呢?

万分感谢
[解决办法]
先说清楚报什么错
[解决办法]
试下用委托看行不行
[解决办法]
这样试试
        public static class NetHelper
        {
            internal sealed class proxy
            {
                private object waitLock = new object();
                private int version;
                private bool isValue;
                private void getNetVersion()
                {
                    version = NetHelper.getNetVersion();
                    Monitor.Enter(waitLock);
                    try
                    {
                        isValue = true;
                        Monitor.Pulse(waitLock);
                    }
                    finally { Monitor.Exit(waitLock); }
                }
                private int wait()
                {
                    Monitor.Enter(waitLock);
                    try
                    {
                        if (!isValue) Monitor.Wait(waitLock);
                    }
                    finally { Monitor.Exit(waitLock); }
                    return version;
                }
                public static int GetNetVersion()
                {
                    proxy proxy = new proxy();
                    new Thread(proxy.getNetVersion).Start();//当然最好是丢在线程池里面
                    return proxy.wait();
                }
            }
            private static int getNetVersion() { return 0; }//这里从网络上取得网上的版本


            public static void getVersion()
            {
                int version = proxy.GetNetVersion();
                Console.WriteLine(version.toString());
            }
        }


[解决办法]
在android里面,你去网络访问获取版本号的时候需要新开一个线程去做

热点排行