简体   繁体   中英

Winforms, control only working with breakpoint

I created a custom Toast Notification for my Winforms application, whenever a custom result is returned, I use a ShowMessage extension to display the notification.

On my login screen, I have a unlock application button that will show the toaster message whenever the password is incorrect.

When I put a breakpoint right before the result.ShowMessage(); the notification appears. But when I remove the breakpoint, it does not appear anymore. I do not change any debug values.

How can I resolve this? I did try implementing a thread.sleep but it did not change anything, the notification only appears when I insert a breakpoint and continue over it.

It is worth noting that the notification works perfectly everywhere else in the application.

Code for the Unlock Application:

private void UnlockApplication()
    {
        var result = new Business.Server.User().Get(_loginModel.UserName, _loginModel.Password.Encrypt());
        if (result.IsSuccessful)
        {
            // Perform log in process
        }
        else
        {
            result.ShowMessage(); //Only works when I put breakpoint here 
        }
    }

Code for ShowMessage extension

public static void ShowMessage<T>(this Models.Result<T> result) where T : class
    {
      Helpers.ToasterNotificationHelper.ShowNotification(result.ResultTypeKey.ToDescription(), result.Message, result.ResultImage(), result.ResultColor(), result.ResultTypeKey == Enums.ResultTypeEnum.Warning ? 5000 : 2500);  
    }

public static void ShowNotification(string header, string message, Image icon, Color backgroundColor, int durationInMilliseconds = 1000)
        {
            if (Application.OpenForms[0] is MyApplication)
            {
                var toasterNotification = new ToasterNotificationControl(header, message, icon, backgroundColor);
                (Application.OpenForms[0] as MyApplication).toastNotificationCollectionControl1.AddNotification(toasterNotification, durationInMilliseconds);
            }
        }

My Toast Notification control is a DevExpress flyout panel control that gets added to the Main application form

Your "Get(_loginModel.UserName ..." seems to be asynchronous. Try to do the next to make the call awaitable:

private async System.Threading.Tasks.Task UnlockApplicationAsync()
{
    var result = await new Business.Server.User().Get(_loginModel.UserName, _loginModel.Password.Encrypt());
...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM