Ответы пользователя по тегу Программирование
  • Опасно ли выполнять такой код в С# + T-SQL? Или каким способом можно написать по-другому?

    Casper-SC
    @Casper-SC Автор вопроса
    .NET программист
    В итоге решил это дело так. На место {0} в C# коде подставляется сгенерированный GUID

    BEGIN TRANSACTION
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED
    
    SET DEADLOCK_PRIORITY LOW;
    DECLARE @Quantity INT = 5;
    
    IF OBJECT_ID('tempdb..##GroupIDs_{0}') IS NULL
    BEGIN
    	CREATE TABLE ##GroupIDs_{0} (
    		ID INT NOT NULL,
    		CONSTRAINT PK_GroupIDs_ID_{0} PRIMARY KEY(ID),
    	);
    END
    
    INSERT INTO ##GroupIDs_{0} (ID) 
    SELECT TOP(@Quantity) ID FROM SOME_GROUP WITH(UPDLOCK, READPAST) WHERE REPLICATED <> 1
    
    -- Первый запрос, вызываемый из C# кода в одной транзакции.
    -- 1 ------------------------------------------------------------------
    UPDATE SOME_GROUP SET REPLICATED = 2 
    OUTPUT 
      INSERTED.ID
     ,INSERTED.NAME
    WHERE ID IN(SELECT ID FROM ##GroupIDs_{0})
    
    -- Второй запрос, вызываемый из C# кода в одной транзакции.
    -- 2------------------------------------------------------------------
    UPDATE SOME_CHILD_ONE SET REPLICATED = 2 
    OUTPUT 
      INSERTED.ID
     ,INSERTED.GROUP_ID
     ,INSERTED.UPDATED
    WHERE GROUP_ID IN(SELECT ID FROM ##GroupIDs_{0}) AND REPLICATED <> 1
    
    -- Третий запрос, вызываемый из C# кода в одной транзакции.
    -- 3 ------------------------------------------------------------------
    UPDATE SOME_CHILD_TWO SET REPLICATED = 2 
    OUTPUT 
      INSERTED.ID
     ,INSERTED.GROUP_ID
     ,INSERTED.NAME
     ,INSERTED.CREATED
    WHERE GROUP_ID IN(SELECT ID FROM ##GroupIDs_{0}) AND REPLICATED <> 1
    
    DROP TABLE ##GroupIDs_{0};
    -- 3 ------------------------------------------------------------------
    
    COMMIT TRANSACTION
    Ответ написан
  • Как лучше изучать C#?

    Casper-SC
    @Casper-SC
    .NET программист
    ITVDN - C# вот тут очень хорошие курсы, я базовый шарп не смотрел, учил по Шилдту и писал прогу. А вот на ITVDN я уже посмотрел курс C# для профессионалов. Толк от этого очень даже был.
    Ответ написан
  • Что делать, если в проекте много плохого кода?

    Casper-SC
    @Casper-SC
    .NET программист
    Если возможно, просто возьми проект домой и пили его там, чтобы он в итоге оставался в рабочем виде, то есть ты мог показав изменения доказать, что оно по прежнему работает. Ну и напиши покрытие тестами. Скажи, что делал в свободное время. Можно даже привести очень много конкретных кусков кода с объяснением их минусов. Объясни, что со временем поддерживать проект станет ещё сложнее. Расскажи о демотивации, скажи, что это реальность и ты не один такой, что в скором им сложнее будет найти человека, у которого будет желанием этим адом заниматься и разбираться в нём. Проработай посыл. Распиши всё, что хочешь сказать. Да можешь в итоге эту писанину и отправить, так как написать всегда можно лучше, чем сказать.
    Ответ написан
  • С чего начать программирование?

    Casper-SC
    @Casper-SC
    .NET программист
    Учи C#. Плюсы конкретно для тебя (возраст):
    1. Море инфы на русском языке и почти вся справка.
    2. Удобнейшая среда разработки и тоже есть на русском языке. При том есть такая фишка, как XML документирование кода. Наводишь курсор мыши на метод в коде или класс, например, и читаешь его описание на русском языке. Это сильно ускорит твоё обучение. При том это реально крутой язык. Очень сильно похож на Java.
    3. Море видеокурсов на русском языке, при том есть очень вменяемые (гугли ITVDN).

    Один из адекватнейших и бесплатных курсов
    Читать:
    1. Герберт Шилдт. Полный справочник по C#.
    2. CLR via C# - Программирование на платформе Microsoft.NET Framework 4.5 на языке C#.
    И так же есть море книг уже по конкретным технологиям языка:
    - ADO.NET и в дополнение Entity Framework (Работа с базами данных).
    - WPF (пользовательский интерфейс, при том одна из удобнейших технологий с серьёзными возможностями).
    - Windows Forms (пользовательский интерфейс).
    - ASP.NET (разработка веб приложений, сайтов).
    - WCF (удобное сетевое программирование, если вкратце, а так можно по старинке на сокетах всё делать).
    - Что-то я определённое не упомянул...
    Скачать Visual Studio 2015 Community Edition
    Ответ написан
  • Не удаётся получить доступ к asp:TextBox из кода. Как получить оттуда значение?

    Casper-SC
    @Casper-SC Автор вопроса
    .NET программист
    Решил проблему так:

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebAppSendMessage.Views.Index" %>
    
    <asp:Content ID="header" ContentPlaceHolderID="head" runat="server">
        <style>
            input[type=text] {
                margin-top: 5px;
                margin-left: 3px;
                margin-right: 3px;
                width: 100%;
            }
    
            input[type=submit] {
                margin-top: 5px;
                margin-left: 3px;
                margin-right: 3px;
            }
        </style>
    </asp:Content>
    
    <asp:Content ID="mainContent" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
        <form id="mainForm" method="post" runat="server">
            <asp:TextBox ID="textBox" runat="server" />
            <br />
            <asp:Button ID="sendMessageButton" runat="server" Text="Отправить сообщение"  OnClick="SendMessageButton_OnClick"/>
        </form>
    </asp:Content>


    using System;
    using System.Web;
    using System.Web.UI;
    
    namespace WebAppSendMessage.Views
    {
        public partial class Index : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                HttpCookie cookie = Request.Cookies["mainMessage"];
                
                if (cookie != null)
                {
                    string message = cookie["Message"];
                    if (message != null)
                    {
                        textBox.Text = message;
                    }
                }
            }
    
            protected void SendMessageButton_OnClick(object sender, EventArgs e)
            {
                HttpCookie cookie = Request.Cookies["mainMessage"];
                if (cookie == null)
                {
                    cookie = new HttpCookie("mainMessage");
                    cookie.Expires = DateTime.Now.AddYears(1);
                }
    
                string message = Request.Form[textBox.UniqueID];
                cookie["Message"] = message;
                Session["Message"] = message;
                Session["BackAddress"] = Request.RawUrl;
    
                Response.Charset = "utf-8";
                Response.Cookies.Add(cookie);
    
                Response.Redirect("Message.aspx");
            }
        }
    }


    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true"
        CodeBehind="Message.aspx.cs" Inherits="WebAppSendMessage.Views.Message" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
        <form id="mainForm" runat="server">
            <asp:Label runat="server" Text="<%# Text %>"></asp:Label>
            <br />
            <asp:Button ID="backButton" runat="server" Text="Вернуться" OnClick="GoToBackButton_OnClick" />
        </form>
    </asp:Content>


    using System;
    using System.Web;
    using System.Web.UI;
    
    namespace WebAppSendMessage.Views
    {
        public partial class Message : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    DataBind();
                }
            }
    
            protected string Text
            {
                get { return (string)Session["Message"]; }
            }
    
            protected void GoToBackButton_OnClick(object sender, EventArgs e)
            {
                string returnUrl = Session["BackAddress"] as string ?? "Index.aspx";
                Response.Redirect(returnUrl);
            }
        }
    }
    Ответ написан
  • Как убрать фриз программы c# WPF?

    Casper-SC
    @Casper-SC
    .NET программист
    Ты для авторизации создаёшь целый поток. Почему тормоза тебе уже сказали, ты вызываешь authVK.join() в основном потоке и тем самым его сам же стопоришь, пока не выполнится второй поток. Вообще благодаря этому коду ты тратишь больше ресурсов и вызываешь ещё большие тормоза, если бы вообще не юзал поток.

    В данном случае использовать нужно Task. Или ещё уйму способов выполнить код не в основном потоке и не создавать новый. Почитай про пул потоков и задачи (Task).

    Я смотрю ты создал константу Empty с пустой строкой!? Так есть же string.Empty стандартный.

    <Window x:Class="Wpf_Task.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow"
            Width="525"
            Height="350"
            WindowStartupLocation="CenterScreen">
       <Window.Resources>
          <Storyboard x:Key="OnLoaded1"
                      RepeatBehavior="Forever">
             <DoubleAnimationUsingKeyFrames Storyboard.TargetName="border"
                                            Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                <EasingDoubleKeyFrame KeyTime="0"
                                      Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:1"
                                      Value="360" />
             </DoubleAnimationUsingKeyFrames>
          </Storyboard>
       </Window.Resources>
    
       <Window.Triggers>
          <EventTrigger RoutedEvent="FrameworkElement.Loaded">
             <BeginStoryboard Storyboard="{StaticResource OnLoaded1}" />
          </EventTrigger>
       </Window.Triggers>
    
       <Grid>
    
          <Button x:Name="executeButton"
                  Width="75"
                  Margin="0,216,0,0"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Top"
                  Click="Button_Click"
                  Content="Выполнить"
                  TextOptions.TextFormattingMode="Display" />
    
          <Rectangle x:Name="border"
                     Width="100"
                     Height="100"
                     Margin="208,57,208,161"
                     HorizontalAlignment="Center"
                     VerticalAlignment="Center"
                     RenderTransformOrigin="0.5,0.5">
             <Rectangle.Fill>
                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                   <GradientStop Offset="0" Color="#FFD1BD69" />
                   <GradientStop Offset="1" Color="#FFFFF5C9" />
                </LinearGradientBrush>
             </Rectangle.Fill>
             <Rectangle.RenderTransform>
                <TransformGroup>
                   <ScaleTransform />
                   <SkewTransform />
                   <RotateTransform />
                   <TranslateTransform />
                </TransformGroup>
             </Rectangle.RenderTransform>
          </Rectangle>
    
          <TextBlock x:Name="_result"
                     Margin="0,187,0,0"
                     HorizontalAlignment="Center"
                     VerticalAlignment="Top"
                     Text="..."
                     TextOptions.TextFormattingMode="Display"
                     TextWrapping="Wrap" />
    
       </Grid>
    </Window>


    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace Wpf_Task
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                executeButton.IsEnabled = false;
                Task<int>.Factory.StartNew(() =>
                {
                   return Auth.Login();
                })
                .ContinueWith(task => //Выполнить код в основном потоке (TaskScheduler.FromCurrentSynchronizationContext())
                {
                    executeButton.IsEnabled = true;
                    _result.Text = task.Result.ToString();
                }, TaskScheduler.FromCurrentSynchronizationContext());
            }
        }
    
        public static class Auth
        {
            private static int _counter;
    
            public static int Login()
            {
                Thread.Sleep(1000);
                return ++_counter;
            }
        }
    }
    Ответ написан
  • Просто убийственно тормозит XAML дизайнер после добавления Autofac. Кто-нибудь с такой проблемой сталкивался?

    Casper-SC
    @Casper-SC Автор вопроса
    .NET программист
    Обновлено: 10.07.2015
    В общем решил проблему так. В конструкторе ViewModelLocator почти ничего не выполняю в режиме дизайнера кода, а свойство сделал таким:
    public MainViewModel Main
            {
                get
                {
                    return !ViewModelBase.IsInDesignModeStatic ?
                        _container.Resolve<MainViewModel>() :
                        _designerMainVm ?? (_designerMainVm = 
                        new MainViewModel(null, null, null, null) { Settings = new AppSettings() });
                }
            }

    Конец обновленного текста

    ViewModelLocator.cs
    public class ViewModelLocator : ViewModelLocatorBase
        {
            private readonly IContainer _container;
            private static ViewModelLocator _locator;
    
            public ViewModelLocator()
            {
                _locator = this;
    
                if (!ViewModelBase.IsInDesignModeStatic)
                {
                    Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
                    Application.Current.MainWindow.Loaded += MainWindow_Loaded;
                    Application.Current.MainWindow.Closing += MainWindow_Closing;
                }
    
                LogManager.Logger.LogPath = LocalConfiguration.Instance.Folders.Logs;
    
                DispatcherHelper.Initialize();
                CorrelationsLocator.Initialize();
    
                if (!ViewModelBase.IsInDesignModeStatic)
                {
                    ProgramIdentification.Initialize(ProgramIdentifier.CbpOperator);
    
                    LocalConfiguration.Instance.Folders.CheckFolders();
                    LocalConfiguration.Instance.LoadAppConfig();
                    LocalConfiguration.Instance.LoadLocalSettings();
    
                    WpfSingleInstance.AppIsAlreadyRunning += (sender, args) =>
                        MessageBox.Show(string.Format("Приложение: {0} уже запущено", args.AppName));
                    WpfSingleInstance.Make();
                }
                _container = RegisterDependencies(LocalConfiguration.Instance);
            }
    
            private IContainer RegisterDependencies(LocalConfiguration config)
            {
                var builder = new ContainerBuilder();
    
                builder.RegisterType<LauncherViewModel>().SingleInstance();
                builder.RegisterType<ShutdownViewModel>().SingleInstance();
                builder.RegisterType<CommandManager>().SingleInstance();
                builder.RegisterType<AccountControllerVm>().SingleInstance();
                builder.RegisterType<ComponentEditorViewModel>().SingleInstance();
                builder.RegisterType<ComponentSelectorViewModel>().SingleInstance();
                builder.RegisterType<RecipeTimeSetEditorViewModel>().SingleInstance();
                builder.RegisterType<CategoryEditorViewModel>().SingleInstance();
                builder.RegisterType<AboutDialogViewModel>().SingleInstance();
                builder.RegisterType<L1ApplicationManagerViewModel>().SingleInstance();
    
                builder.RegisterType<CarEditorViewModel>() //Редактор машин
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.CarsWindowSettings; //Настройки окна (положение, размер, состояние)
                    }).SingleInstance();
    
                builder.RegisterType<ClientsEditorViewModel>() //Редактор клиентов
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.ClientsWindowSettings; //Настройки окна (положение, размер, состояние)
                    }).SingleInstance();
    
                builder.RegisterType<ReportsWindowViewModel>() //Отчёты
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.ReportsWindowSettings; //Настройки окна (положение, размер, состояние)
                        e.Instance.ReportsFolder = config.Folders.Documents;
                        e.Instance.ReportMode = ReportMode.Applications;
                    });
    
                builder.RegisterType<EventLogViewModel>() //Журнал событий
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.EventLogWindowSettings; //Настройки окна (положение, размер, состояние)
                        e.Instance.SetConfiguration(config.Config, config.Folders.EventReportFolder);
                    });
    
                builder.RegisterType<RecipesEditorViewModel>() //Редактор рецептов
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.RecipeWindowSettings; //Настройки окна (положение, размер, состояние)
                        e.Instance.SetEditorSettings(config.Settings.RecipeEditorConfig);
                    })
                    .SingleInstance();
    
                builder.RegisterType<ApplicationsEditorViewModel>() //Редактор заявок
                    .OnActivated(e =>
                    {
                        e.Instance.LastSelectedItems = config.Settings.LastSelectedItemsInAppWindow; //Состояние последних выбранных элементов.
                        e.Instance.WindowSettings = config.Settings.AppEditorWindowSettings;
                    })
                    .SingleInstance();
    
                builder.RegisterType<MainViewModel>() 
                    .OnActivated(e =>
                    {
                        var appManager = e.Context.Resolve<L1ApplicationManagerViewModel>();
                        appManager.Main = e.Instance;
                        if (!ViewModelBase.IsInDesignModeStatic)
                        {
                            e.Instance.Title = ProgramIdentification.GetCurrentProgramName();
                        }
                        e.Instance.Settings = config.Settings.ApplicationSettings;
                    })
                    .SingleInstance();
    
                return builder.Build();
            }
    
            private void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
                WindowManager.Instance.Initialize(Application.Current.MainWindow, Main);
                Main.OnWindowLoaded();
            }
    
            private void MainWindow_Closing(object sender, CancelEventArgs e)
            {
                Debug.WriteLine("Начало: MainWindow_Closing");
                Window window = (Window)sender;
    
                Debug.WriteLine("Конец: MainWindow_Closing");
    
                if (WindowManager.Instance.OpenMessageDialog(DialogIcons.Help, DialogButtons.YesNo,
                    "Выход из программы",
                    "Вы действительно хотите завершить работу приложения?") == UserDialogResult.No)
                    e.Cancel = true;
                else
                {
                    window.Closing -= MainWindow_Closing;
                    try
                    {
                        LocalConfiguration.Instance.SaveLocalSettings();
                        LocalConfiguration.Instance.SaveCurrentAppConfig();
                    }
                    catch (Exception ex)
                    {
                        LogManager.Logger.AppendException(ex);
                    }
                }
            }
    
            private void Current_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
            {
                LogManager.Logger.AppendException(e.Exception);
                MessageBox.Show(e.Exception.ToString());
            }
    
            #region Свойства
    
            public static ViewModelLocator Current
            {
                get { return _locator; }
            }
    
            public MainViewModel Main
            {
                get { return _container.Resolve<MainViewModel>(); }
            }
    
            public L1ApplicationManagerViewModel ApplicationsManager
            {
                get { return _container.Resolve<L1ApplicationManagerViewModel>(); }
            }
    
            public AccountControllerVm AccountController
            {
                get { return _container.Resolve<AccountControllerVm>(); }
            }
    
            public ShutdownViewModel Shutdown
            {
                get { return _container.Resolve<ShutdownViewModel>(); }
            }
    
            public CategoryEditorViewModel CategoryEditor
            {
                get { return _container.Resolve<CategoryEditorViewModel>(); }
            }
    
            public ApplicationsEditorViewModel ApplicationsEditor
            {
                get { return _container.Resolve<ApplicationsEditorViewModel>(); }
            }
    
            public RecipesEditorViewModel RecipesEditor
            {
                get { return _container.Resolve<RecipesEditorViewModel>(); }
            }
    
            public ComponentEditorViewModel ComponentEditor
            {
                get { return _container.Resolve<ComponentEditorViewModel>(); }
            }
    
            public ComponentSelectorViewModel ComponentsSelector
            {
                get { return _container.Resolve<ComponentSelectorViewModel>(); }
            }
    
            /// <summary>Редактор клиентов</summary>
            public ClientsEditorViewModel ClientsEditor
            {
                get { return _container.Resolve<ClientsEditorViewModel>(); }
            }
    
            public CarEditorViewModel CarsEditor
            {
                get { return _container.Resolve<CarEditorViewModel>(); }
            }
    
            public CommandManager CommonCommands
            {
                get { return _container.Resolve<CommandManager>(); }
            }
    
            public LauncherViewModel Launcher
            {
                get { return _container.Resolve<LauncherViewModel>(); }
            }
    
            public AboutDialogViewModel About
            {
                get { return _container.Resolve<AboutDialogViewModel>(); }
            }
    
            /// <summary>
            /// Возвращает новый экземпляр модели представления Отчётов
            /// </summary>
            public ReportsWindowViewModel NewReport
            {
                get { return _container.Resolve<ReportsWindowViewModel>(); }
            }
    
            /// <summary>
            /// Возвращает новый экземпляр модели представления Журнала событий
            /// </summary>
            public EventLogViewModel NewEventLog
            {
                get { return _container.Resolve<EventLogViewModel>(); }
            }
    
    
            #endregion
    
            #region Методы
    
    
            #endregion
        }
    Ответ написан
  • Как отловить момент, когда окно помещается в одну из сторон экрана (прилипает как бы), при нажатии WIN + LEFT?

    Casper-SC
    @Casper-SC Автор вопроса
    .NET программист
    Вот решение проблемы с максимизацией окна
    blogs.msdn.com/b/llobo/archive/2006/08/01/maximizi...

    Но в конкретно этом примере есть проблема, там сбрасывается минимальный размер окна. Его тоже нужно задавать.
    Ответ написан