System.Windows.MessageBox не дожидается ввода пользователя, прежде чем приступить к работе

... и не имеет смысла почему. TT

В моем обработчике событий Application_Startup у меня есть код, который выглядит примерно так:

private void Application_Startup(object sender, StartupEventArgs e)
{
    string errorMessage;

    if(CheckStartUpConditions(out errorMessage))
    {
        (new MainWindow()).Show();
    }
    else
    {
        MessageBox.Show(errorMessage, "Application Startup", 
            MessageBoxButton.OK, MessageBoxImage.Error);

        Shutdown();
    }
}

private bool CheckStartUpConditions(out string errorMessage)
{
    errorMessage = string.Empty;  

    if(...)
        errorMessage += "Please login to xxx. ";

    if(...)
        errorMessage += "Please install xxx.";

    if(string.IsNullOrEmpty(errorMessage))
        return true;
    else
        return false;
}

Окно сообщения ненадолго появляется на секунду, прежде чем произнести «POOF!» Не дожидаясь, пока я нажму «ОК» или кнопку «Х». Я действительно озадачен, почему это происходит, поэтому любая помощь будет очень признательна .

Я пробовал закомментировать вызов Shutdown только для шуток и хихиканья, и он по-прежнему ведет себя так же.

Кроме того, в приложении есть SplashScreen , поэтому я не знаю, влияет ли это на это.

РЕДАКТИРОВАТЬ: Я добавил дополнительный код, если это поможет. В окне сообщения отображается правильное сообщение об ошибке. Просто не останется достаточно долго, чтобы пользователи ее прочитали. например, средний фильтр (средний фильтр) или алгоритм суммы абсолютных разностей при обработке изображений. По мере того, как ядро ​​перемещается в следующую позицию, будут происходить некоторые избыточные чтения из памяти, потому что данные, содержащиеся в новом ядре, будут частично перекрывать данные предыдущего.

Позвольте мне объяснить на практическом примере ... Предположим, вы хотите выполнить медианный фильтр на большой 2D-матрице с размером ядра (окна) 3x3. Первая позиция ядра (красная на изображении ниже) будет центрирована в (1,1), вторая позиция (зеленая) будет центрирована в (1,2). Обратите внимание, как желтая область является перекрытием, и теперь эти значения необходимо перезагрузить из памяти.

meanfilter

Моя конкретная проблема - это средний трехмерный фильтр, поэтому перекрытие еще больше (3 ^ 3-3 ^ 2 = 18 для 3D vs 3 ^ 2-3 = 6 для 2D).

Я уверен, что это обычная проблема ... Кто-нибудь знает, как такие алгоритмы эффективно реализуются либо для устранения избыточного поиска в памяти, либо для использования пространственной и временной локальности кэша ЦП на современных архитектурах (например, двухсторонний ассоциативный кеш)?

Моя конкретная проблема в 3D берет только среднее значение от ближайших 6 соседей (не диагональных) и реализовано в C следующим образом:

for( i = 0; i <= maxi; i++ ) {
    for( j = 0; j <= maxj; j++ ) {
        for( k = 0; k <= maxk; k++ ) {
            filteredData[ i ][ j ][ k ] = 
            ONE_SIXTH *
            ( 
             data[ i + 1 ][ j     ][ k     ] +
             data[ i - 1 ][ j     ][ k     ] +
             data[ i     ][ j + 1 ][ k     ] +
             data[ i     ][ j - 1 ][ k     ] +
             data[ i     ][ j     ][ k + 1 ] +
             data[ i     ][ j     ][ k - 1 ]
            );
        }
    }
}

9
задан Glorfindel 10 August 2019 в 03:13
поделиться