WCF已完成事件多次被调用

时间:2016-02-08 05:57:10

标签: c# wcf methods

我正在$string = '3<em>a +</em> 2<em>b</em>'; $pattern = '#\d{1}<em>\w{1} \+</em> \d{1}<em>\w{1}</em>#'; preg_match($pattern, $string, $matches); print_r($matches); 调用wcf服务方法并在asynchronous点击时生成Completed个事件:

Button

问题是,private void OnSearchProductClick(object sender, RoutedEventArgs e) { service.GetProductsCompleted += new EventHandler<GetProductsCompletedEventArgs>(webService_GetProductsCompleted); ProductType productType = (ProductType)cboProductType.SelectedItem; _productTypeID = productType.ProductTypeID; service.GetProductsAsync(txtName.Text, txtCode.Text, _productTypeID); } 事件被多次调用。当webService_GetProductsCompleted按钮第一次被调用一次时,当我点击第二次被调用两次时,点击第三次被调用三次,依此类推。这是一种非常不寻常的行为。为什么会发生这种情况?如何解决?

以下是click事件:

webService_GetProductsCompleted

2 个答案:

答案 0 :(得分:2)

问题在于这一行:

service.GetProductsCompleted += new EventHandler<GetProductsCompletedEventArgs>(webService_GetProductsCompleted);

你应该从表单Load事件中调用它,而不是在这里。因为每次调用这些方法(OnSearchProductClick)时,都会再次添加相同的处理程序,以便多次执行。

其他选项首先取消注册,然后重新注册。

答案 1 :(得分:0)

问题在这里。

    private void OnSearchProductClick(object sender, RoutedEventArgs e)
    {
        service.GetProductsCompleted += new EventHandler<GetProductsCompletedEventArgs>(webService_GetProductsCompleted);
    }

通过这样做,您在点击事件中订阅事件,因此在您进行新订阅的每次点击时。

而不是这个,你应该订阅服务的事件一次(在这个点击事件之前,通常在表单的加载事件中或在构造函数中根据你的说服力)。

但有一件事你应该记住,这个&#34;服务&#34;订阅事件和调用API时,对象应该是相同的。

以下链接可能会清除这个想法 https://msdn.microsoft.com/en-us/library/ms366768.aspx