用于自动更新的事件

时间:2016-02-15 19:49:51

标签: c# .net tweetinvi

我在c#.NET上有这个小代码,它发布推文并使用tweetinvi显示twitter的时间线。并且我希望在发送推文时自动更新时间线。任何人都可以建议如何使用事件吗?谢谢你的回答。

private void button1click(object sender, EventArgs e)
    {
        if (richTextBox1.Text != "")
        {
            Tweet.PublishTweet(richTextBox1.Text);
            MessageBox.Show("Your tweet was sent!", "Important Message");

        }
        else
        {
            MessageBox.Show("You need to write something!", "Important Message");
        }
    }

    private void Timeline_GetHomeTimeline(object sender, EventArgs e)
    {

    var loggedUser = User.GetLoggedUser();
        string x = "";
        var homeTimelineTweets = loggedUser.GetHomeTimeline();
        foreach (var tweet in homeTimelineTweets)
        {
            x += tweet.Text + Environment.NewLine;
        }
        richTextBox2.Text = x;


    }

1 个答案:

答案 0 :(得分:0)

首先请注意,拨打多个电话User.GetLoggedUser();是一种非常糟糕的做法。原因是端点每15分钟(每分钟1次)限制为15个请求。

如果用户在15分钟内发布了超过15条推文,那么您的代码就会中断。

现在您有多种解决方案来解决问题,但最好的解决方案是UserStream(解决方案1)。

解决方案1 ​​

我建议在Initialized事件中添加以下代码。

var us = Stream.CreateUserStream();
us.TweetCreatedByMe += (sender, args) =>
{
    // Update your rich textbox by adding the new tweet with tweet.Text
    var tweetPublishedByMe = args.Tweet;

    // OR Get your timeline and rewrite the text entirely in your textbox
    var userTimeline = Timeline.GetHomeTimeline();
    if (userTimeline != null)
    {
        // foreach ...
    }
};

us.StartStreamAsync();

解决方案2

如果您不需要在每次用户发布推文时重新加载Timeline,但您确实需要显示新推文,请使用以下解决方案。

var tweet = Tweet.PublishTweet("hello");
if (tweet != null)
{
    // Update your rich textbox
}

解决方案3

如果推文成功发布,请更新timeline

var tweet = Tweet.PublishTweet("hello");
if (tweet != null)
{
    var userTimeline = Timeline.GetHomeTimeline();
    if (userTimeline != null)
    {
        // foreach ...
    }
}

注意请注意,我从来没有需要在任何时候检索LoggedUser。大多数情况下,LoggedUser应该被检索一次,然后在您的应用中使用。

另请注意,我是Tweetinvi的主要开发者。