我正在尝试从静态类(称为TitterHandler
)使用TweetSharp,所以理论上我可以稍后将其交换出来。
该示例建议使用Dispatch.BeginInvoke
,因此在更新UI时,可以使用UI线程完成。
我想将数据加载到模型中,尽管这肯定会触发更新UI的OnPropertyChanged
事件。由于这是静态方法,我使用System.Windows.Deployment.Current.Dispatcher.BeginInvoke
。
然而,它不会因“未设置为引用的对象”异常而崩溃。我对线程的了解相当有限,但是从我收集的内容
TweetCache
)但该应用程序仍然崩溃Thread
),但它仍然崩溃了。我没有想法,这是代码......
public class TwitterHandler
{
public static TwitterService Service = new TwitterService(AppConfig.TwitterConsumerKey, AppConfig.TwitterConsumerSecret);
internal static void LoadTweetsFromWeb()
{
TwitterHandler.Service.AuthenticateWith(AppConfig.TwitterToken, AppConfig.TwitterTokenSecret);
TwitterHandler.Service.ListTweetsOnUserTimeline(new ListTweetsOnUserTimelineOptions()
{ ScreenName = AppConfig.NewsBrandingTwitterHandle, },
TwitterHandler.OnTweetsLoaded);
}
// Put this here to maintain a refrence to the thread to avoid GC
public static DispatcherOperation Thread;
// A 'thread external' reference with no onward events that trigger UI changes
public static List<Tweet> TweetCache;
public static void OnTweetsLoaded(IEnumerable<TwitterStatus> statuses, TwitterResponse res)
{
if (res.StatusCode == HttpStatusCode.OK)
{
TwitterHandler.Thread = System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
{
List<Tweet> tweets = new List<Tweet>();
foreach (TwitterStatus status in statuses)
{
tweets.Add(new Tweet()
{
Content = status.Text,
UrlString = status.Place.Url,
});
}
if (tweets.Count > 0)
{
// App.Tweets = tweets;
// TweetCache raises no 'PropertyChanged' event
TwitterHandler.TweetCache = tweets;
}
});
}
}
}
答案 0 :(得分:2)
我们的共享调试功能显示status.Place
为空。
(其他选项可能但不太可能:调用者处置statuses
成员)