Вопрос

Некоторое время назад я написал пользовательский контроль Silverlight, который имел функцию импорта/экспорта CSV. Это работало нормально, до недавнего времени я обнаружил, что это ошибки в одном сценарии. Это могло быть связано с переездом в Silverlight 3.

Ошибка:
Сообщение: безразличная ошибка в приложении Silverlight 2
Код: 4004
Категория: ManagedRuntimeError
Сообщение: System.security.securityException: диалоги должны быть инициированы пользователем.
at System.windows.controls.openfiledialog.showdialog ()
на mycontrol.openimportfiledialog ()
в ...

Код:

private void BrowseFileButton_Click(object sender, RoutedEventArgs e)
{
    if (string.IsNullOrEmpty(lblFileName.Text))
    {
        if (MessageBox.Show("Are you sure you want to change the Import file?", "Import", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
        {
            return;
        }
    }
    EnableDisableImportButtons(false);
    var fileName = OpenImportFileDialog();
    lblFileName.Text = fileName ?? string.Empty;
    EnableDisableImportButtons(true);    
}

private string OpenImportFileDialog()
{
    var dlg = new OpenFileDialog { Filter = "CSV Files (*.csv)|*.csv" };
    if (dlg.ShowDialog() ?? false)
    {
        using (var reader = dlg.File.OpenText())
        {
            string fileName;
            //process the file here and store fileName in variable
            return fileName;
        }
    }
}

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

Это было полезно?

Решение

Вы делаете два действия на одном пользователе.

Вы показываете Bessagebox, который эффективно использует ваше разрешение, чтобы показать диалог по действию пользователя.

Затем вы пытаетесь показать диалог, так как это второй диалог по действию пользователя, он не допускается.

Избавьтесь от диалога подтверждения, и все будет в порядке.

Другие советы

Удалить точки разрыва перед if (dlg.showdialog () ?? false) Код запустит свою работу для меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top