gpt4 book ai didi

c# - 在另一个线程上运行时为 "Object reference not set to an instance of an object"

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:10 24 4
gpt4 key购买 nike

我正在尝试从静态类(称为 TitterHandler)使用 TweetSharp,因此理论上我可以稍后将其换掉。

该示例建议使用 Dispatch.BeginInvoke,因此当 UI 更新时,它是使用 UI 线程完成的。

我只想将数据加载到模型中,尽管不可否认这会触发一个 OnPropertyChanged 事件来更新 UI。由于这是来 self 使用 System.Windows.Deployment.Current.Dispatcher.BeginInvoke 的静态方法。

但是,它不断崩溃并出现“对象未设置为引用”异常。我对线程的了解相当有限,但从我收集的内容来看

  • UI 线程需要更新 UI,但主线程可能会触发一个事件,然后由 UI 线程获取 - 为了测试这个,我分配给一个完全独立于 UI 的静态变量(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;
}

});
}


}




}

最佳答案

我们共同的调试能力表明 status.Place 为空。

(其他选项可能但不太可能:调用者处置 statuses 成员)

关于c# - 在另一个线程上运行时为 "Object reference not set to an instance of an object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21724743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com