Действительно Располагает все еще названы, когда исключение выдается в операторе использования?

Обновление пользовательского интерфейса было в моем случае просто очистить метки (см. UpdateInterface ()). Однако я обнаружил «ошибку». Это был файл ".jpg" и BackgroundImage, который я загружал при каждом обновлении. Хотя это было «просто» 1280x1024, это было слишком много для обновления интерфейса.

Когда я очистил изображения, обновление было немедленно.

Мое решение теперь:

this.BackgroundImage = ((System.Drawing.Image(resources.GetObject("$this.BackgroundImage")));
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.SetStyle(System.Windows.Forms.ControlStyles.OptimizedDoubleBuffer | System.Windows.Forms.ControlStyles.AllPaintingInWmPaint, true);

в Form1.Designer.cs

и Приостановка и возобновление макета со следующим классом (который я нашел где-то в Интернете) [ 117]

public static class ControlHelper
{
    #region Redraw Suspend/Resume
    [DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
    private const int WM_SETREDRAW = 0xB;

    public static void SuspendDrawing(this Control target)
    {
        SendMessage(target.Handle, WM_SETREDRAW, 0, 0);
    }

    public static void ResumeDrawing(this Control target) { ResumeDrawing(target, true); }
    public static void ResumeDrawing(this Control target, bool redraw)
    {
        SendMessage(target.Handle, WM_SETREDRAW, 1, 0);

        if (redraw)
        {
            target.Refresh();
        }
    }
    #endregion
}

Также я изменил файлы ".jpg" на файлы ".bmp". Теперь интерфейс гладкий и быстрый.

И @Jesting:

Не уверен, что это на самом деле: this.BackgroundImage = BackgroundWelcome; но действительно ли необходимо назначать такие статические данные каждый раз?

Нет, я мог бы найти лучшее решение. Однако, поскольку приложение очень маленькое, и у меня есть только четыре фоновых изображения, мне было проще «жестко закодировать» его.

Наконец, тег (-reader) на самом деле не был проблемой.

А для обновления пользовательского интерфейса я использую эту довольно простую функцию:

private void UpdateInterface(PassportDatabaseReader.Passport _passport)
    {
        if (InvokeRequired)
        {
            this.BeginInvoke(new Action<PassportDatabaseReader.Passport>(UpdateInterface), new object[] { _passport });
            return;
        }
        else
        {
            ControlHelper.SuspendDrawing(this);
            new Thread(() => ChangeBackground(BackgroundPassport)).Start();
            lPassportNumberNo.Text = _passport.PassportNo;
            strPassportNo = _passport.PassportNo;
            lPassengerName.Text = _passport.Name.Replace(' 

Приложение представляет собой считыватель «свадебного паспорта», который показывает имя, номер комнаты гостей, номер стола, а также изображение "паспорта" на экране.

,'\n'); lPax.Text = _passport.Pax; lTableNo.Text = _passport.TableNo; lRoomNo.Text = _passport.RoomNo; pbTables.Hide(); try { pbPasspic.Load("..\\..\\Pics\\" + _passport.PassportNo + ".png"); pbPasspic.Show(); pbTables.ImageLocation = "..\\..\\Tischordnung_" + _passport.TableNo + ".png"; pbTables.Show(); } catch (Exception) { throw; } ControlHelper.ResumeDrawing(this); } }

Приложение представляет собой считыватель «свадебного паспорта», который показывает имя, номер комнаты гостей, номер стола, а также изображение "паспорта" на экране.

95
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Это - то, как отражатель декодирует IL, сгенерированный Вашим кодом:

private static void Main(string[] args)
{
    SqlConnection conn = new SqlConnection("...");
    try
    {
        conn.Open();
        DoStuff();
    }
    finally
    {
        if (conn != null)
        {
            conn.Dispose();
        }
    }
}

, Таким образом, ответ да, он закроет соединение, если

DoStuff()
выдаст исключение.
19
ответ дан Florin Sabau 24 November 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: