Monotouch螺纹,GC,WCF

时间:2010-05-12 09:04:12

标签: c# multithreading singleton xamarin.ios

这是一个关于我猜的最佳实践的问题,但它直接适用于我目前的MT项目。

我正在使用WCF服务与服务器进行通信。

要执行此操作,请执行以下操作:

services.MethodToCall(params);

和asynch:

services.OnMethodToCallCompleted += delegate{
    //do stuff and ting
};

如果您不小心在asynch回调范围内定义的变量有时会被gc清除,这会导致崩溃,这可能会导致问题。

所以 - 除非我100%确定不需要它们,否则我将这些声明放在回调范围之外。

现在 - 当做东西和Ting暗示改变ui时 - 我将它全部包装在InvokeOnMainThread调用中。我想在这里包装所有东西会减慢主线程的速度,并且会使多线程变得无用。

即使我对所有这些都很小心我仍然会崩溃,但我不明白为什么!

我确信它与线程,范围和所有这些有关。

现在 - 除了更新可能需要在InvokeOnMainThread内部发生的UI之外,我唯一能想到的就是我有一个单独的'Database'类。这基于此线程http://www.yoda.arachsys.com/csharp/singleton.html

的第5版代码

现在,如果服务方法返回需要添加/更新到Database类的数据 - 我也将它包装在InvokeOnMainThread调用中。

仍然随机崩溃。

所以......我的问题是:

我是胖客户端的新手 - 我是从Web开发的角度出发的,我们不需要太担心线程了:))

除了我所提到的 - 还有其他我应该注意的事情吗?

上述内容是否正确?或者我想念一些事情吗?

干杯

瓦特://

1 个答案:

答案 0 :(得分:1)

仅供参考,我们通过在应用程序完成启动时保留对原始控制器的引用(在我们的例子中是导航控制器)来克服这个驼峰。我们面临的问题是GC正在清理控制器,因为它认为这是不必要的,因为它们是在方法范围内声明的。

我希望这个答案可以帮助其他人。

干杯。