CallbackOnCollectedDelegate error when using OpenFileDialog - c#

I would like to add an OpenFileDialog to my application. The dialog opens as expected but as soon as I close the dialog I get an error regarding "CallbackOnCollectedDelegate". I looked for OpenFileDialog examples on the web but they do not look much different from my code. Also I looked at solutions for the "CallbackOnCollectedDelegate" error here on stackoverflow but unfortunately I do not see the point where my code fails.
I am using a similar constructions to open other self created dialog boxes in my program - without problems. This is the first time I try to use a predefined Dialog and maybe I am doing something strange here?
OpenFileDialog Dialog_OpenFile;
private void OpenFileButton_Click(object sender, EventArgs e) //open file
{
if (Dialog_OpenFile == null) //only create once
{
Dialog_OpenFile = new OpenFileDialog();
Dialog_OpenFile.InitialDirectory = ".";
Dialog_OpenFile.RestoreDirectory = false;
Dialog_OpenFile.Multiselect = false;
Dialog_OpenFile.Filter = "OpenOffice (*.ods)|*.ods|Microsoft Excel (*.xlsx)|*.xlsx";
Dialog_OpenFile.FilterIndex = 2;
}
DialogResult status = Dialog_OpenFile.ShowDialog();
if (status == DialogResult.OK) { ...do something... }
}
I have added the error message I get (unfortunately in German but the most important parts should be understandable):
Der Assistent für verwaltetes Debugging
""CallbackOnCollectedDelegate"" hat ein Problem in
""C:\Users...\Visual Studio
2013\Projects\myprog\myprog\bin\Debug\myprog.vshost.exe""
festgestellt. Zusätzliche Informationen: Für den von der Garbage
Collection gesammelten Delegaten vom Typ
"System.Windows.Forms!System.Windows.Forms.NativeMethods+WndProc::Invoke"
wurde ein Rückruf durchgeführt. Dies kann Anwendungsabstürze,
Datenbeschädigung und -verlust zur Folge haben. Beim Übergeben von
Delegaten an nicht verwalteten Code müssen die Delegaten von der
verwalteten Anwendung beibehalten werden, bis sichergestellt ist, dass
sie nie aufgerufen werden.
Ein Ausnahmefehler des Typs "System.NullReferenceException" ist in
System.Windows.Forms.dll aufgetreten. Zusätzliche Informationen: Der
Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
"myprog.vshost.exe" (CLR v4.0.30319: myprog.vshost.exe):
"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll"
geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist
optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert. Das
Programm "[3452] myprog.vshost.exe" wurde mit Code 0 (0x0) beendet.

Related

KeyNotFoundException in Visual Studio Extension

I am currently writing a Visual Studio Extension, creating glyph tags. First I created a example project, there is everything running fine and it's creating the glyphs. I implemented it now to my main project and got this exception, but I don't know what is missing.
System.Collections.Generic.KeyNotFoundException: Der angegebene Schlüssel war nicht im Wörterbuch angegeben.bei System.Collections.Generic.Dictionary2.get_Item(TKey key)bei Microsoft.VisualStudio.Text.Editor.Implementation.GlyphMarginVisualManager1.AddGlyph(TGlyphTag tag, SnapshotSpan span)bei Microsoft.VisualStudio.Text.Editor.Implementation.GlyphMargin1.RefreshGlyphsOver(ITextViewLine textViewLine)bei Microsoft.VisualStudio.Text.Editor.Implementation.GlyphMargin1.OnLayoutChanged(Object sender, TextViewLayoutChangedEventArgs e)bei Microsoft.VisualStudio.Text.Utilities.GuardedOperations.RaiseEvent[TArgs](Object sender, EventHandler`1 eventHandlers, TArgs args) --- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde --- bei Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)
This is my code:
if (classification.ClassificationType.Classification.ToLower().Contains("comment"))
{
//if the word "todo" is in the comment,
//create a new TodoTag TagSpan
int index = classification.Span.GetText().ToLower().IndexOf(m_searchText);
if (index != -1)
{
yield return new TagSpan<IssueTag>(new SnapshotSpan(classification.Span.Start + index, m_searchText.Length), new IssueTag());
}
}
The exception occurs at "yield return"

How to capture everything in a string into separate groups in C#? [duplicate]

This question already has answers here:
Get text between 2 html tags c#
(3 answers)
Closed 3 years ago.
I have some data in a file and I am using Regex to get individual elements and remove all the \r\n between the <opening> and </closing> tags.
But when i am trying to select the elements separately, at the end, the whole data is getting selected as one group.
This is my Regex:
(<([ph0-9figc]+)>)([a-zA-Z0-9äöüÄÖÜß[:punct:] \n\r\t])+(<\/\2>)
Sample with Input Data
It may not be the best idea to do this task with regular expressions, especially for replacing new lines.
If we really have to, we might want to capture those tags one by one. For instance, this expression only captures the p tags using three capturing groups ():
(<p>)([\s\S]*?)(<\/p>)
regex101.com.
RegEx Circuit
We can also visualize your expressions in jex.im:
JavaScript Demo
const regex = /(<p>)([\s\S]*?)(<\/p>)/gm;
const str = `<p>
<st>Liebe stern-Redaktion,
</st>
<i>Liebe stern-Redaktion,</i> warum schreiben Sie nicht, was wirklich freitags whrend der Protest-Demos am Grenzzaun passiert? Wie die Familien der Mrder fr jede gettete jdische Person belohnt werden? Oder ber die Feuerballons, die aus dem Gazastreifen in den Sden Israels geschickt werden? Brita Singh, Scheeel</p>
<fig>
<img src="images/img_8-1.jpg" width="596" height="428" alt="" />
<fc>
<i>stern</i> Nr. 10/2019, Bild der Woche: Kindertrauer im Gazastreifen</fc>
</fig>
<p>
<i>Sehr geehrte Frau Singh,</i> bei Demonstrationen am Grenzzaun starben laut Bericht der UN-Kommission in neun Monaten 35 Kinder durch Schüsse israelischer Soldaten. Zwei Journalisten und drei Sanitäter wurden erschossen, über 6000 Menschen verletzt. Israel hat gerade Ermittlungen zu elf der Todesfälle aufgenommen. Dagegen hat es in dem Zeitraum kein israelisches Todesopfer am Grenzzaun zu Gaza gegeben. Die Hamas pflegt einen Märtyrerkult und belohnt Morde mit Geld; israelische Sicherheitskräfte zerstören Häuser von Angehörigen palästinensischer Attentäter. Beides fördert den Hass. Opfer sind Menschen wie das Mädchen auf diesem Bild. Der <i>stern</i> hat keinen einseitigen Blick auf die Komplexität des Nahostkonflikts wir schauen stets auf beide Seiten. <i>Mit freundlichen Grüßen Cornelia Fuchs, Ressortleiterin Ausland</i></p>
<p>Eine liebevolle Mutter will, dass ihr Kind glücklich ist, egal, ob sie sein Leben versteht. Alles andere ist Egoismus und keine Mutterliebe. </p>
<p>Annemarie Fischer, Wielenbach</p>`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
C# Test
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = #"(<p>)([\s\S]*?)(<\/p>)";
string input = #"<p>
<st>Liebe stern-Redaktion,
</st>
<i>Liebe stern-Redaktion,</i> warum schreiben Sie nicht, was wirklich freitags whrend der Protest-Demos am Grenzzaun passiert? Wie die Familien der Mrder fr jede gettete jdische Person belohnt werden? Oder ber die Feuerballons, die aus dem Gazastreifen in den Sden Israels geschickt werden? Brita Singh, Scheeel</p>
<fig>
<img src=""images/img_8-1.jpg"" width=""596"" height=""428"" alt="""" />
<fc>
<i>stern</i> Nr. 10/2019, Bild der Woche: Kindertrauer im Gazastreifen</fc>
</fig>
<p>
<i>Sehr geehrte Frau Singh,</i> bei Demonstrationen am Grenzzaun starben laut Bericht der UN-Kommission in neun Monaten 35 Kinder durch Schüsse israelischer Soldaten. Zwei Journalisten und drei Sanitäter wurden erschossen, über 6000 Menschen verletzt. Israel hat gerade Ermittlungen zu elf der Todesfälle aufgenommen. Dagegen hat es in dem Zeitraum kein israelisches Todesopfer am Grenzzaun zu Gaza gegeben. Die Hamas pflegt einen Märtyrerkult und belohnt Morde mit Geld; israelische Sicherheitskräfte zerstören Häuser von Angehörigen palästinensischer Attentäter. Beides fördert den Hass. Opfer sind Menschen wie das Mädchen auf diesem Bild. Der <i>stern</i> hat keinen einseitigen Blick auf die Komplexität des Nahostkonflikts wir schauen stets auf beide Seiten. <i>Mit freundlichen Grüßen Cornelia Fuchs, Ressortleiterin Ausland</i></p>
<p>Eine liebevolle Mutter will, dass ihr Kind glücklich ist, egal, ob sie sein Leben versteht. Alles andere ist Egoismus und keine Mutterliebe. </p>
<p>Annemarie Fischer, Wielenbach</p>";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
If you are willing to accept the extra "_" and other white space characters then I simplified your pattern as follows:
var pat = #"(<(?'tag'[ph0-9figc]+)>)(?'body'([\wäöüÄÖÜß\p{P}\s])+)(<\/\k'tag'>)";
And the regular expression removing the CR-LF is:
var body = m.Groups["body"].Value
.Replace(Environment.NewLine, " ")
.Replace("\r", " ")
.Replace("\n", " ");
var tag = m.Groups["tag"].Value;
var noCrLf = re.Replace(text, m => $"<{tag}>{body}</{tag}>");
Though looking at your data, I may not have understood what you are after. One of your tags, for example, is not matched by your tag pattern "[ph0-9figc]+". If I did not understand your concern, please straighten me out.

CallbackOnCollectedDelegate in mousekeyhook

I'm using https://github.com/gmamaladze/globalmousekeyhook for a program. The hook fires, but after some time there comes a CallbackOnCollectedDelegate and i don't have the knowledge for changing the code from github. I couldn't transform the help from into my code CallbackOnCollectedDelegate in globalKeyboardHook was detected
The failuremessage in Visual Studio (Language German) is:
CallbackOnCollectedDelegate ist aufgetreten. Message: Der Assistent
für verwaltetes Debugging ""CallbackOnCollectedDelegate"" hat ein
Problem in
""C:\Users\Admin\ownCloud\GRANT-ZIM\Code_Grant\Filter\GRANTExample\bin\x64\Debug\GRANTExample.vshost.exe""
festgestellt. Zusätzliche Informationen: Für den von der Garbage
Collection gesammelten Delegaten vom Typ
"Gma.System.MouseKeyHook!Gma.System.MouseKeyHook.WinApi.HookProcedure::Invoke"
wurde ein Rückruf durchgeführt. Dies kann Anwendungsabstürze,
Datenbeschädigung und -verlust zur Folge haben. Beim Übergeben von
Delegaten an nicht verwalteten Code müssen die Delegaten von der
verwalteten Anwendung beibehalten werden, bis sichergestellt ist, dass
sie nie aufgerufen werden.
The used code is:
private IKeyboardMouseEvents m_GlobalHook;
public void Subscribe()
{
m_GlobalHook = Hook.GlobalEvents();
m_GlobalHook.MouseDownExt += GlobalHookMouseDownExt;
m_GlobalHook.KeyUp += OnKeyUp;
}

cortana own command in backgroundtask

i am trying to write an c# programm to define custom commands for cortana!
First of all i create an default app-application and load the VCD file...
I create a second project link this to the main project and create inside this a backgroundtask to handle the cortana requests!
Now cortana know my commands, but if i tell her something she is answering "Es ist etwas schief gelaufen" (in english: "it fails").
I think the BackgroundTask is not correctly called.
App.cs
namespace CortanaCommandsStart
{
/// <summary>
/// Stellt das anwendungsspezifische Verhalten bereit, um die Standardanwendungsklasse zu ergänzen.
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// Initialisiert das Singletonanwendungsobjekt. Dies ist die erste Zeile von erstelltem Code
/// und daher das logische Äquivalent von main() bzw. WinMain().
/// </summary>
public App()
{
Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(Microsoft.ApplicationInsights.WindowsCollectors.Metadata | Microsoft.ApplicationInsights.WindowsCollectors.Session);
this.InitializeComponent();
this.Suspending += OnSuspending;
}
/// <summary>
/// Wird aufgerufen, wenn die Anwendung durch den Endbenutzer normal gestartet wird. Weitere Einstiegspunkte
/// werden z. B. verwendet, wenn die Anwendung gestartet wird, um eine bestimmte Datei zu öffnen.
/// </summary>
/// <param name="e">Details über Startanforderung und -prozess.</param>
protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
// App-Initialisierung nicht wiederholen, wenn das Fenster bereits Inhalte enthält.
// Nur sicherstellen, dass das Fenster aktiv ist.
if (rootFrame == null)
{
// Frame erstellen, der als Navigationskontext fungiert und zum Parameter der ersten Seite navigieren
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Zustand von zuvor angehaltener Anwendung laden
}
// Den Frame im aktuellen Fenster platzieren
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
// Wenn der Navigationsstapel nicht wiederhergestellt wird, zur ersten Seite navigieren
// und die neue Seite konfigurieren, indem die erforderlichen Informationen als Navigationsparameter
// übergeben werden
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
try {
StorageFile vcdStorageFile = await Package.Current.InstalledLocation.GetFileAsync(#"LEDControll.xml");
await VoiceCommandDefinitionManager.InstallCommandDefinitionsFromStorageFileAsync(vcdStorageFile);
System.Diagnostics.Debug.WriteLine("There was no error registering the Voice Command Definitions");
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("There was an error registering the Voice Command Definitions", ex);
}
// Sicherstellen, dass das aktuelle Fenster aktiv ist
Window.Current.Activate();
}
/// <summary>
/// Wird aufgerufen, wenn die Navigation auf eine bestimmte Seite fehlschlägt
/// </summary>
/// <param name="sender">Der Rahmen, bei dem die Navigation fehlgeschlagen ist</param>
/// <param name="e">Details über den Navigationsfehler</param>
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}
/// <summary>
/// Wird aufgerufen, wenn die Ausführung der Anwendung angehalten wird. Der Anwendungszustand wird gespeichert,
/// ohne zu wissen, ob die Anwendung beendet oder fortgesetzt wird und die Speicherinhalte dabei
/// unbeschädigt bleiben.
/// </summary>
/// <param name="sender">Die Quelle der Anhalteanforderung.</param>
/// <param name="e">Details zur Anhalteanforderung.</param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Anwendungszustand speichern und alle Hintergrundaktivitäten beenden
deferral.Complete();
}
}
}
Appxmanifest:
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
<Identity Name="32ed3ec5-2e4a-4517-ae2b-842653ab8a8e" Publisher="CN=Flo" Version="1.0.0.0" />
<mp:PhoneIdentity PhoneProductId="32ed3ec5-2e4a-4517-ae2b-842653ab8a8e" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>CortanaCommandsStart</DisplayName>
<PublisherDisplayName>Flo</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="CortanaCommandsStart.App">
<uap:VisualElements DisplayName="CortanaCommandsStart" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="CortanaCommandsStart" BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<uap:Extension Category="windows.appService" EntryPoint="CortanaCommand.CortanaCommandService">
<uap:AppService Name="CortanaCommandService" />
</uap:Extension>
</Extensions>
</Application>
</Applications>
</Package>
CortanaCommand.cs
namespace CortanaCommand
{
public sealed class CortanaCommandService : IBackgroundTask
{
private VoiceCommandServiceConnection voiceServiceConnection;
private BackgroundTaskDeferral _deferral;
public async void Run(IBackgroundTaskInstance taskInstance)
{
_deferral = taskInstance.GetDeferral();
voiceServiceConnection.VoiceCommandCompleted += VoiceCommandCompleted;
AppServiceTriggerDetails triggerDetails = taskInstance.TriggerDetails as AppServiceTriggerDetails;
if (triggerDetails != null && triggerDetails.Name.Equals("CortanaCommandService"))
{
try
{
voiceServiceConnection = VoiceCommandServiceConnection.FromAppServiceTriggerDetails(triggerDetails);
VoiceCommand voiceCommand = await voiceServiceConnection.GetVoiceCommandAsync();
// Perform the appropriate command depending on the operation defined in VCD
VoiceCommandUserMessage userMessage = new VoiceCommandUserMessage();
switch (voiceCommand.CommandName)
{
case "LedChangeColor":
var destination = voiceCommand.Properties["color"][0];
SendCompletionMessageForDestination(destination);
break;
default:
LaunchAppInForeground();
break;
}
}
finally
{
_deferral.Complete();
}
}
}
private void VoiceCommandCompleted(VoiceCommandServiceConnection sender, VoiceCommandCompletedEventArgs args)
{
if (this._deferral != null)
{
this._deferral.Complete();
}
}
private async void SendCompletionMessageForDestination(string destination)
{
// Take action and determine when the next trip to destination
// Inset code here
// Replace the hardcoded strings used here with strings
// appropriate for your application.
// First, create the VoiceCommandUserMessage with the strings
// that Cortana will show and speak.
var userMessage = new VoiceCommandUserMessage();
userMessage.DisplayMessage = "Here’s your trip.";
userMessage.SpokenMessage = "Your trip to Vegas is on August 3rd.";
// Optionally, present visual information about the answer.
// For this example, create a VoiceCommandContentTile with an
// icon and a string.
var destinationsContentTiles = new List<VoiceCommandContentTile>();
// Create the VoiceCommandResponse from the userMessage and list
// of content tiles.
var response = VoiceCommandResponse.CreateResponse(userMessage, destinationsContentTiles);
// Ask Cortana to display the user message and content tile and
// also speak the user message.
await voiceServiceConnection.ReportSuccessAsync(response);
}
private async void LaunchAppInForeground()
{
var userMessage = new VoiceCommandUserMessage();
userMessage.SpokenMessage = "Launching Adventure Works";
var response = VoiceCommandResponse.CreateResponse(userMessage);
// When launching the app in the foreground, pass an app
// specific launch parameter to indicate what page to show.
response.AppLaunchArgument = "showAllTrips=true";
await voiceServiceConnection.RequestAppLaunchAsync(response);
}
}
}
VCD:
<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.2">
<CommandSet xml:lang="de-de" Name="LEDControll">
<CommandPrefix>LED</CommandPrefix>
<Example>Steuere die LEDs</Example>
<Command Name="LedChangeColor">
<Example>LED Farbe grün</Example>
<ListenFor>farbe {color}</ListenFor>
<Feedback>Farbe wird geändert in {color}</Feedback>
<VoiceCommandService Target="CortanaCommandService"/>
</Command>
<PhraseList Label="color">
<Item> grün </Item>
<Item> blau </Item>
<Item> rot </Item>
</PhraseList>
</CommandSet>
</VoiceCommands>
Thank you, for your help!
Just adding the answer here so it's clear:
To ensure that the background task is added to the App Package properly, you can add a reference from the startup project to the background task project within VS:
Right click on references in the startup project
Go to Add Reference
Select "Projects" on the left
Tick the box next to the project containing the background task.
Hit OK.
This ensures that VS will build and copy the background task into the package when you go to deploy it. Otherwise, you run into difficult to debug problems like this.
Typically you can tell this has happened when you've triple-checked that the Package manifest uap:Extension entry has the right details, but can't get a breakpoint to hit in the background task when you try to activate it. I'll also check to see if there are any event log type entries that can be looked up to see this more easily.

Obscured and Unobscured event. Error

I try to write an Obscured and Unobscured event, but there is one Error in:
PhoneApplicationFrame phoneAppRootFrame = (Application.Current as App).RootFrame
error:
Auf den Member 'Timer.App.RootFrame.get' kann nicht mit einem Instanzenverweis zugegriffen werden. Qualifizieren Sie ihn stattdessen mit einem Typnamen.
The Error is in German, because I'm using the German Version of Visual Studio
How I can solve the problem?
EDIT:
code:
PhoneApplicationFrame phoneAppRootFrame = (Application.Current as App).RootFrame;
phoneAppRootFrame.Obscured += OnObscured;
phoneAppRootFrame.Unobscured += Unobscured;

Categories