1. Take the steps described in Integrate DevMateKit if you haven't done it yet.
  2. You can specify additional DMFrameworkSettings properties if needed. DevMate Crash Report provides the following configuration options:

Property

Type

Description

IsBeta

bool

Specifies whether a current version of the application is Beta.

ApplicationSettings

Dictionary<string,object>

Application settings that must be sent with the report data.

AdditionalInfromation

string

Additional information that must be sent with the report data.

ApplicationIcon

string

Sets a “TitleBar” icon for DevMate Framework windows. Must contain at least one 16x16pt icon. Example: pack://application:,,,/TestApp;component/icon.ico.

LogFilePath

string

Path to a log file (if there is a number of log files, it sends only the recently used). If a value is null or empty, or file does not exist, then the Framework tries to load a file from the Logs property.

Logs

string

Used to set up specific logs if a LogFilePath value is null or empty. If a value is null or empty, an empty string is sent to the server.

For example:

DMFeedbackFrameworkSettings.ApplicationSettings.Add("Setting1", "Value1"); 
DMFeedbackFrameworkSettings.ApplicationSettings.Add("Language", "en"); 
DMFeedbackFrameworkSettings.ApplicationSettings.Add("AppRunCount", 0); 
DMFeedbackFrameworkSettings.ApplicationSettings.Add("Setting2", "Value2");  

DMFeedbackFrameworkSettings.LogFilePath = @"C:\Program Files\AppName\Logs\logfile.log";
DMFeedbackFrameworkSettings.AdditionalInformation = "Version with hidden feature";

Crashes

This report type is generally used to notify about unhandled exceptions.
To subscribe for unhandled exceptions:

App.Current.DispatcherUnhandledException += CurrentOnDispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
                    
...
 
private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
    DMFeedbackWindowController.BigIconSource = “pack://application:,,,/Images/icon.png";
    DMFeedbackWindowController.ShowCrashReportDialog(e.Exception);  
}    
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)  
{
    DMFeedbackWindowController.BigIconSource = “pack://application:,,,/Images/icon.png";
    DMFeedbackWindowController.ShowCrashReportDialog(e.ExceptionObject as Exception);
}
private void CurrentOnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)  
{
    DMFeedbackWindowController.BigIconSource = “pack://application:,,,/Images/icon.png";
    DMFeedbackWindowController.ShowCrashReportDialog(e.Exception);  
}

Exceptions

Generally, this type of a report is used to show non-critical exceptions handled with “try-catch” statement.
For example:

try  
{
    Directory.CreateDirectory(“testFolder”);  
}  
catch (Exception ex)  
{
    Trace.TraceError("Could not create folder”);a
    DMFeedbackWindowController.BigIconSource = “pack://application:,,,/Images/icon.png";
    DMFeedbackWindowController.ShowCrashReportDialog(ex, FeedbackTypes.Exception);  
}