如何将任务延迟指定的时间



我有WCF WebService for Silverlight客户端。

假设客户端点击"Make building"。

服务将接收新的任务,并计算时间,直到它准备好采取行动(即添加到数据库)。

时间-完成任务需要多少时间(即建造建筑物)。

关键是如何将任务延迟一定的时间。

也,有没有一种方法来流时间从服务器到客户端?我已经设置了这个:

        [OperationContract]
    public void GetTime()
    {
        foreach (IDuplexClient client in _clientDic.Values)
        {
            client.ShowStatus(DateTime.Now);
        }
    }
        [OperationContract]
    public void Login()
    {
        string clientID = OperationContext.Current.Channel.SessionId;
        IDuplexClient client = OperationContext.Current.GetCallbackChannel<IDuplexClient>();
        _clientDic.Add(clientID, client);
    }

IDuplexClient:

        [OperationContract(IsOneWay = true)]
    void ShowStatus(DateTime status);

客户端:

            _client.LoginAsync();
        _client.GetTimeAsync();
        _client.ShowStatusReceived += new EventHandler<ShowStatusReceivedEventArgs>(_client_ShowStatusReceived);
        void _client_ShowStatusReceived(object sender, ShowStatusReceivedEventArgs e)
    {
        label1.Content = e.status.ToString();
    }

的工作. .第一次运行。但时间不会被刷新,这不是我想要的。此外,在浏览器中强制刷新几次后,时间停止显示。

    public partial class MainPage : UserControl
{
    Service1Client _client;
    int time = 10000;
    public MainPage()
    {
        InitializeComponent();
        _client = new Service1Client(new PollingDuplexHttpBinding { DuplexMode = PollingDuplexMode.SingleMessagePerPoll, OpenTimeout = TimeSpan.FromMinutes(10), ReceiveTimeout = TimeSpan.FromMinutes(10) },
new EndpointAddress("http://localhost:44544/Service1.svc"));
        _client.LoginAsync();
        _client.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(_client_DoWorkCompleted);
        _client.DoWorkAsync();
        _client.AddNewTaskAsync("testTaskzor", time);
        _client.GetTimeAsync();
        //_client.AddNewTaskCompleted += new EventHandler<AddNewTaskCompletedEventArgs>(_client_AddNewTaskCompleted);
        _client.ShowStatusReceived += new EventHandler<ShowStatusReceivedEventArgs>(_client_ShowStatusReceived);
    }
    void _client_ShowStatusReceived(object sender, ShowStatusReceivedEventArgs e)
    {
        label1.Content = e.status.ToString();
    }
    void _client_DoWorkCompleted(object sender, DoWorkCompletedEventArgs e)
    {
        //label1.Content = e.Result;
    }
}

这是整个客户端代码。虽然我最终固定和时间是正确地流到客户端(这是令人惊讶的容易,它是足够的封闭foreach与while(true)语句,至少现在)。

但是在另一边。当我关闭浏览器,再打开它,什么也没有显示。刷新后,时间也没有显示

最简单的方法是在客户端实现延迟。如果不破坏模型,就不可能延迟像WCF这样的RESTful服务。

相关内容

  • 没有找到相关文章

最新更新