我正在$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
答案 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