• 4 вариации метода Main в с#?

    C# 7.1
    public static void Main();
    public static int Main();
    public static void Main(string[] args);
    public static int Main(string[] args);
    public static Task Main();
    public static Task<int> Main();
    public static Task Main(string[] args);
    public static Task<int> Main(string[] args);
    Ответ написан
    Комментировать
  • 4 вариации метода Main в с#?

    @D3lphi
    public static void Main()
    {
    }

    public static void Main(string[] args)
    {
    }

    public static int Main()
    {
    }

    public static int Main(string[] args)
    {
    }
    Ответ написан
    2 комментария
  • Как программно вызвать диалог использования программы по умолчанию для заданного протокола (http/https)?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Нашёл решение. На основе кода: https://github.com/joewalker/devtools-window/blob/...

    public static void NotifySystemOfNewRegistration() {
    
                tagOPENASINFO info = new tagOPENASINFO();
                info.cszFile = "https";
                info.cszClass = null;
                info.oaifInFlags = tagOPEN_AS_INFO_FLAGS.OAIF_FORCE_REGISTRATION |
                                   tagOPEN_AS_INFO_FLAGS.OAIF_URL_PROTOCOL |
                                   tagOPEN_AS_INFO_FLAGS.OAIF_REGISTER_EXT;
                SHOpenWithDialog(IntPtr.Zero, ref info);
            }
    
            // http://msdn.microsoft.com/en-us/library/windows/desktop/bb773363(v=vs.85).aspx 
            private struct tagOPENASINFO {
                [MarshalAs(UnmanagedType.LPWStr)]
                public string cszFile;
    
                [MarshalAs(UnmanagedType.LPWStr)]
                public string cszClass;
    
                [MarshalAs(UnmanagedType.I4)]
                public tagOPEN_AS_INFO_FLAGS oaifInFlags;
            }
    
            [Flags]
            private enum tagOPEN_AS_INFO_FLAGS {
                OAIF_ALLOW_REGISTRATION = 0x00000001,   // Show "Always" checkbox
                OAIF_REGISTER_EXT = 0x00000002,   // Perform registration when user hits OK
                OAIF_EXEC = 0x00000004,   // Exec file after registering
                OAIF_FORCE_REGISTRATION = 0x00000008,   // Force the checkbox to be registration
                OAIF_HIDE_REGISTRATION = 0x00000020,   // Vista+: Hide the "always use this file" checkbox
                OAIF_URL_PROTOCOL = 0x00000040,   // Vista+: cszFile is actually a URI scheme; show handlers for that scheme
                OAIF_FILE_IS_URI = 0x00000080    // Win8+: The location pointed to by the pcszFile parameter is given as a URI
            }
    
            // http://www.pinvoke.net/default.aspx/shell32.SHOpenWithDialog
            [DllImport("shell32.dll", EntryPoint = "SHOpenWithDialog", CharSet = CharSet.Unicode)]
            private static extern int SHOpenWithDialog(IntPtr hWndParent, ref tagOPENASINFO oOAI);

    Результат:

    59e7476d5d485533031337.png

    Диалоговое окно выводится.
    Ответ написан
    Комментировать
  • Вопрос по требованиям к реализации?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    1) Использовать файл конфигурации приложения для User-specific настроек

    Рядом со сборкой (MyApplication.exe или MyApplication.dll) можно положить XML-файл настроек (MyApplication.config), который будет влиять на конкретный экземпляр сборки. Можно почитать об этом у Рихтера (в главе про разветывание сборок) или в документации, там же есть XML-схема.
    Кроме того, такой Web.config файл есть у каждого ASP.NET-приложения (а у десктопного - App.config) на уровне проекта (не путать с Web.config в папке Views)

    2) Использовать ресурсы для хранения UI-строк

    Все видимые пользователю строковые ресурсы в приложениях принято оборачивать заменять на локализованный эквивалент. Это может быть сервис, в который подставит нужные значения, в зависимости от настроек приложения/языка пользователя и т.п. Грубо говоря, словарь терминов, который выбирает значения из таблицы по значению. Используется что-то вроде:
    <h3>@Localization.Get("Contacts_PageHeader")</h3>
    Извлекать значения, соответственно, из ресурсов.
    Ответ написан
    Комментировать
  • Как добавлять значения в двухмерный массив?

    @Sumor
    Массивы, они на то и массивы, что в них нельзя добавлять значения.
    Используйте список массивов: List и добавляйте массивы через Add.
    Ответ написан
    1 комментарий