 <p>It is not possible to remove anonymous lambdas event handlers. Instead put your lambda into a normal method. Than you can call <code>proxy.GetBasicEntryCompleted -= MyMethod;</code>.</p> <p>Here is an example how it could look like:</p> <pre><code>private void OnBasicEntryCompleted(object sender, BasicEntryEventArgs e) { if (e.Result.Any()) { e.TargetComboBox.ItemsSource = e.Result.ToList(); e.TargetComboBox.DisplayMemberPath = "Description"; e.TargetComboBox.SelectedItem = "ID"; } else { e.TargetComboBox.ItemsSource = null; } var proxy = (Proxy)sender; proxy.GetBasicEntryCompleted -= OnBasicEntryCompleted; } public void Sniper(string sourceTableName, ComboBox targetComboBox) { proxy.GetBasicEntryCompleted += OnBasicEntryCompleted; proxy.GetBasicEntryAsync(sourceTableName, targetComboBox); } </code></pre> <p>Also be aware that you always subscribe to an event BEFORE you invoke the method that will raise it. Otherwise it could happen, that won't be informed due to a racing condition.</p> <p>And if you call this async method the question would be in which thread will the completed event be raised? If it happens in thread where the async task had run, you won't be within the gui thread and manipulating gui objects (like the combo box) is not recommended within other threads. So maybe encapsulate your accesses to the combo box within a <code>e.TargetComboBox.Invoke()</code> call.</p>