0

ローカリゼーションをサポートしたい 1 つのアプリケーションに取り組んでいます。ローカリゼーションを実装するためにサテライト アセンブリの概念を実装しましたが、問題は、選択した言語に基づいて実行時にすべてのコントロールのテキストをロード/レンダリングするため、アプリケーションのロードが非常に遅くなることです。

今私の質問は次のとおりです。ロード時間中に遅延/ちらつきなしにすべてのメインフォームコントロールを更新できるより良いアプローチはありますか?

c#.net Winforms を使用してアプリケーションを開発しています。

私のプロジェクトの構造:

ここに画像の説明を入力

これが私が試したものです[サンプルコード]:

注 : このサンプル アプリケーションには非常に少数のコントロールしか含まれていませんが、実際のアプリケーションにはロード中に遅延/ちらつきが発生するコントロールが多すぎるため、これは正常に機能します。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Resources;
using System.Reflection;
using System.Globalization;
using System.Threading;

namespace Localization
{
    public partial class Form1 : Form
    {
        #region constants

        const String DEFAULT_CULTURE = "en-US";

        #endregion

        ResourceManager resourceManager = null;
        public Form1()
        {
            InitializeComponent();
            resourceManager = new ResourceManager("Localization.Resources", Assembly.GetExecutingAssembly());
        }

        private void cmbSelectLanguages_SelectedIndexChanged(object sender, EventArgs e)
        {
            String languageCode = "";
            switch (cmbSelectLanguages.SelectedItem.ToString())
            {
                case "German": languageCode = "de-DE";
                    break;
                case "French": languageCode = "fr-FR";
                    break;

                case "English": languageCode = DEFAULT_CULTURE;
                    break;

                default: languageCode = DEFAULT_CULTURE;
                    break;
            }
            SetCulture(languageCode);
            SetControlsText();
        }
        private void SetCulture(String languageCode)
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageCode);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //set the default languge to US-English while loading the form
            SetCulture(DEFAULT_CULTURE);
            SetControlsText();
        }
        private void SetControlsText()
        {
            lblCulture.Text = " " + System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
            lblUserName.Text = resourceManager.GetString("lblUsername");
            lblPassword.Text = resourceManager.GetString("lblPassword");
            btnLogin.Text = resourceManager.GetString("lblLogin");
            btnCancel.Text = resourceManager.GetString("lblCancel");
            lblChooseLanguage.Text = resourceManager.GetString("lblChooseLanguage");
            lblLoginTitle.Text = resourceManager.GetString("lblUserLogin");
            pic.Image = (Image)resourceManager.GetObject("Login");
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {

        }

        private void btnLogin_Click(object sender, EventArgs e)
        {

        }
    }
}

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1

0

パフォーマンスの問題が発生している理由はわかりませんが、http://www.hexadigm.com/freedownloads.aspxで私のアプリケーションの開発者向けバージョンをダウンロードしてみてください。. Windows の [スタート] メニューの [Hexadigm Systems] の下にある [Sample Solution] をロードし、コードを確認します (長くはありません)。それはあなたがやろうとしていることをし、ちらつきはありません。あなた自身のテクニックがそのちらつきや環境 (特定のコントロールなど) の原因である可能性がありますが、さらに調査する必要があります (たとえば、「SuspendAllLayout()」と「ResumeAllLayout()」の呼び出しを参照してください実装されていない場合、一部のフォームのパフォーマンスに影響を与える可能性があるコード)。ただし、私のコードはそれを行う方法のモデルと見なされるべきではないことに注意してください。当時 (数年前) に実験しただけだったので、すぐに書きましたが、「公式」の方法に近い可能性があります。実際、これは一般的な "

于 2015-03-09T15:34:45.343 に答える