From 1b599ef37a4b9c3263bb17f79a6f235f9dbbd9c9 Mon Sep 17 00:00:00 2001 From: dlatikaynen Date: Sat, 11 Apr 2020 17:44:41 +0200 Subject: [PATCH] terminate with useful message in case PortAudio is missing on startup --- SDRSharp/MainForm.cs | 31 +++++++++++++++++++++++++++---- SDRSharp/Program.cs | 6 +++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/SDRSharp/MainForm.cs b/SDRSharp/MainForm.cs index 790b585..4e64494 100644 --- a/SDRSharp/MainForm.cs +++ b/SDRSharp/MainForm.cs @@ -396,11 +396,20 @@ public MainForm() _streamControl = new StreamControl(_streamHookManager); InitializeComponent(); - InitializeGUI(); - InitialiseSharpPlugins(); } - private void InitializeGUI() + public bool Initialize() + { + if (InitializeGUI()) + { + InitialiseSharpPlugins(); + return true; + } + + return false; + } + + private bool InitializeGUI() { _initializing = true; @@ -427,7 +436,20 @@ private void InitializeGUI() var defaultIndex = 0; var savedIndex = -1; - var devices = AudioDevice.GetDevices(DeviceDirection.Input); + List devices; + try + { + devices = AudioDevice.GetDevices(DeviceDirection.Input); + } + catch(TypeInitializationException tEx) + { + MessageBox.Show( + $"{ this.Text } needs the PortAudio v19 library to work:\n{ tEx.Message }\n\nInstall and configure PortAudio first.", $"Could not start { this.Text }", + MessageBoxButtons.OK, MessageBoxIcon.Information); + + return false; + } + var savedDeviceName = Utils.GetStringSetting("inputDevice", string.Empty); for (var i = 0; i < devices.Count; i++) { @@ -681,6 +703,7 @@ private void InitializeGUI() #endregion _initializing = false; + return true; } private void ExtIO_LOFreqChanged(int frequency) diff --git a/SDRSharp/Program.cs b/SDRSharp/Program.cs index 4aec44d..d8157f3 100644 --- a/SDRSharp/Program.cs +++ b/SDRSharp/Program.cs @@ -25,7 +25,11 @@ static void Main() Control.CheckForIllegalCrossThreadCalls = false; Application.EnableVisualStyles(); - Application.Run(new MainForm()); + var mainForm = new MainForm(); + if (mainForm.Initialize()) + { + Application.Run(mainForm); + } if (Environment.OSVersion.Platform == PlatformID.Win32Windows || Environment.OSVersion.Platform == PlatformID.Win32NT) {