monodroid开发之--call Hanlder

monodroid和java在开发android应用程序的差不多。贴点代码希望有对研究monodroid的兄弟帮助。

 

(应用http://www.cnblogs.com/TerryBlog/archive/2010/08/25/1808445.html)android 有一种叫消息队列的说法,这里我们可以这样理解:假如一个隧道就是一个消息队列,那么里面的每一部汽车就是一个一个消息,这里我们先忽略掉超车等种种因素,只那么先进隧道的车将会先出,这个机制跟我们android 的消息机制是一样的。

Android 的线程消息机制

android 在设计的时候引入了 wince 的消息机制,即将每一个消息发送到队列里面,遵循先进先出原则。发送消息并不会阻塞线程,而接收线程会阻塞线程,这是因为 Android 的Handler 机制,当Handler 处理完一个 Message 对象才会接着去取下面一个消息进行处理。

 

 

test_Handler.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Util;

namespace Demo
{
    [Activity(Label 
= "test_Handler")]
    
public class test_Handler : Activity
    {
        
public const int CALL_FROM_WEB_COMPLETE = 0x001002;
        
public const int CALL_FROM_WEB_SUCCESSFUL = 0x001003;

        
protected Handler handler = null;
        
private Handler_CallBack handler_CallBack = null;


        
protected override void OnCreate(Bundle bundle)
        {
            
base.OnCreate(bundle);

            handler_CallBack 
= new Handler_CallBack();
            handler_CallBack.Completed 
+= (o, e) =>
            {
                
//..call function
            };
            handler 
= new Handler(handler_CallBack);

            System.Threading.ThreadPool.QueueUserWorkItem((objs) 
=>
            
//..or handler.Post(() =>
            {
                
try
                {
                   
//..execute function
                }
                
catch (Exception ex)
                {
                    Log.I(
"Error", ex.ToString());
                }
                
finally
                {
                    handler.SendMessage(
new Message() { What = CALL_FROM_WEB_COMPLETE, Arg1 = CALL_FROM_WEB_COMPLETE });
                }
            });
        }

        
internal class Handler_CallBack : Handler.ICallback
        {
            
public event EventHandler Completed;

            
public bool HandleMessage(Message msg)
            {
                
if (msg.What == CALL_FROM_WEB_COMPLETE)
                {
                    
if (Completed != null
                    {
                        Completed(CALL_FROM_WEB_SUCCESSFUL, 
new EventArgs());
                    }
                    
return true;
                }
                
return false;
            }

            
public IntPtr Handle
            {
                
get { return this.Handle; }
            }
        }
    }
}

 

 

posted @ 2010-12-03 17:38  大肚小男人  阅读(784)  评论(3编辑  收藏  举报