在 Windows Phone 中非同步作業比較常見,我的方法很簡單,兩句話。這是第二句,它看上去是這樣的:
MethodCall.Invoke(
() => // 這是一個Func<Object>,返回一個結果
{
// 這是一個耗時1秒以上的操作,為了獲得一個值,亦或是一個結果集,我寫這個類的目的是我把HTTP請求改寫成了同步,所以這樣會很方便,同樣這個類不僅限於HTTP請求。所有耗時、延時操作都可用。
string result = BigFunction(); // List<string> results = BigFunction();

 

return result;
},
(obj) => // 這是一個Action<Object>,處理返回結果
{
// 獲得了返回結果,這裡是執行緒安全的,內部使用 Dispatcher.BeginInvoke 來調用
MessageBox.Show(obj.ToString());
// List<string> results = (List<string>)obj;
});
另附上 MethodCall.cs
using System;
using System.Threading;
public static class MethodCall
{
static MethodCall()
{
OnComplate += new ComplateCallBack((obj) => {
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => {
_callBack.Invoke(obj);
});
});
}
private static event ComplateCallBack OnComplate;
private delegate void ComplateCallBack(object result);

 

private static Action<object> _callBack;
public static void Invoke(Func<object> action, Action<object> callback)
{
_callBack = callback;
ThreadStart t = new ThreadStart(() => {
OnComplate(action.Invoke());
});
new Thread(t).Start();
}
}
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()