Nano Hash - криптовалюты, майнинг, программирование

Проект уже создан до завершения работы мастера проектов

Я создал мастер проекта для своего шаблона. С помощью этого мастера пользователь может ввести несколько параметров, например имя приложения, а затем создать приложение. Проблема в том, что мастер запускается, но проект создается сразу, а не после завершения работы мастера. Это означает, что замены не происходит.

У меня есть эта форма (сильно упрощенная):

<Window x:Class="PartyTemplateWizard.Form"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="340" d:DesignWidth="750">

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <TextBlock Text="Name" Grid.Column="0" />

        <TextBox x:Name="Name" Grid.Column="1" Text="{Binding Path=dummyproperty, FallbackValue='Naam'}" />

        <Button Content="Ok" Grid.Column="1" Grid.Row="1" />
    </Grid>
</Window>

С волшебником:

public class Wizard : IWizard
{
    private readonly Form _form = new Form();

    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
    {
        try
        {
            _form.Show();

            string name = _form.Name.Text;

            if (!string.IsNullOrEmpty(name)) replacementsDictionary.Add("$appname$", name);
        }
        catch (Exception e)
        {
        }
    }

    public bool ShouldAddProjectItem(string filePath)
    {
        return true;
    }

    public void RunFinished()
    {
    }

    public void BeforeOpeningFile(ProjectItem projectItem)
    {
    }

    public void ProjectItemFinishedGenerating(ProjectItem projectItem)
    {
    }

    public void ProjectFinishedGenerating(Project project)
    {
    }
}

И я привязал это к своему шаблону с помощью этого фрагмента кода:

<WizardExtension>
  <Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=6c4fd97fa2ac3b4f</Assembly>
  <FullClassName>PartyTemplateWizard.Wizard</FullClassName>
</WizardExtension>

Полный код доступен на github: https://github.com/Avalaxy/PartyTemplateWizard

Кто-нибудь знает, почему проект создается до успешного завершения работы мастера (хотя это невозможно, поскольку на кнопке «ОК» еще нет обработчика событий)?


Ответы:


1

Попробуйте вместо этого использовать _form.ShowDialog();, чтобы ваш основной поток был заблокирован. На данный момент кажется, что метод RunStarted выполняется без блокировки, поэтому ваша настроенная форма не используется.

12.06.2013
  • Великолепно! Это отлично решило проблему :) Мои замены теперь работают нормально. 13.06.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..