比如我有类public static NetHelper
{
public static getVersion()
{
int version = getNetVersion();//这里从网络上取得网上的版本
}
}上面的类在线程中调用是没有问题的,但在主线程调用就会出错
那在不更改主线程业务的情况下,
如何修改这个GetVersion方法,那他可以在主线程,也可以在子线程中调用呢?万分感谢
{
public static getVersion()
{
int version = getNetVersion();//这里从网络上取得网上的版本
}
}上面的类在线程中调用是没有问题的,但在主线程调用就会出错
那在不更改主线程业务的情况下,
如何修改这个GetVersion方法,那他可以在主线程,也可以在子线程中调用呢?万分感谢
解决方案 »
- .NET WinForm中TreeView控件使用
- 如何创建一个后台服务?
- 設置DataGridView選中行的亮度
- 1.怎样判断用户同时按下了AIT+N键?2.怎样将屏幕上(200,300)那个点设置成红色?
- c#怎样传递一个窗体给vb写的dll
- 如何把DataTable1 里的前面10行数据复制给DataTable2?
- 奇怪的数据库问题,请高手指教!!急在线等
- 请问怎样使程序字体与系统主题保持一致?
- sql server中保存大文件的问题(上100M或者几百M)求助!!!!
- C#Windows窗体应用程序如何返回到登陆界面
- 刚学C#的菜鸟--lable
- 求一个算法:有M个去往不同目的的人,有N辆座位数不同的车,怎么能算出用最少的车把这些人送到目的地?要求每辆车直达。
Android4.0 以后不允许在主线程进行网络连接,否则会出现 android.os.NetworkOnMainThreadException
----------------------------
然后我现在这个类又有可能给子线程和主线程调用,
现在要求在不改变其他业务流程,只改动这个GetVersion方法,
有没有办法让这个方法可以让主线程也进行调用
谢谢
我试过用CountDownLatch来等待线程返回
但是这样又可能会出现 主线程成时间不响应而就用崩溃的情况
{
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());
}
}