【问题标题】:How to Use WaitHandle in WCF如何在 WCF 中使用 WaitHandle
【发布时间】:2014-12-22 23:57:33
【问题描述】:

我确实有两种方法,如下所示

private void UpdateGrid(ServiceRef.GetCampaignInfoArrayCompletedEventArgs e)
{
  try
  {
    if (CampaignStatusGrid.DataSource == null || e == null || e.Result == null)
                return;
    UpdateLocalCampaignList(sManager.campinfotmp, e.Result, null);
    sManager.campinfo = DeepCopy(sManager.campinfotmp);
    int index = CampaignStatusView.FocusedRowHandle;
    CampaignStatusGrid.BeginInvoke(new MethodInvoker(delegate { CampaignStatusGrid.DataSource = sManager.campinfo; }));
    CampaignStatusGrid.BeginInvoke(new MethodInvoker(delegate { CampaignStatusView.FocusedRowHandle = index; }));
  }
  catch (Exception ex)
  {
    if (ex.InnerException != null && ex.InnerException.GetType() == typeof(System.ServiceModel.EndpointNotFoundException))
                Program.ReConnect();
     else
        MessageBox.Show(string.Format("Exception Message:\n{0}\n\nInnerException Message:\n{1}\n\nStackTrace:\n{2}",
                    ex.Message, ex.InnerException != null ? ex.InnerException.Message : "None", ex.StackTrace));
        }
}

private bool RunSSIS(string SsisPackagePath)
{
.....
}

第一个方法,异步运行并更新一个 girdview 数据源,第二个方法由用户直接调用。 我不使用任何线程任务。 我遇到的问题是,当我调用 RunSSIS 方法时,需要 5 到 20 分钟才能获得结果。 但同时异步方法每 5 到 10 秒运行一次

我知道我应该在异步方法中使用某种 WaitHandle 来等待任何正在进行的调用,但我不知道如何。

谢谢

【问题讨论】:

  • 您的RunSSIS() 方法有什么作用?它是如何得到结果的?
  • @dymanoid 运行SSIS包,Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute();

标签: c# multithreading wcf asynchronous


【解决方案1】:

我认为您可以将 Task 类与异步和等待一起使用。 http://msdn.microsoft.com/en-us/library/system.threading.tasks.task%28v=vs.110%29.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多