У меня есть пользовательский ярлык в приложении winform. Я изменяю содержимое ярлыка между потоками.
Я открываю фоновый поток для чтения входных данных и вызываю свой многопоточный метод для изменения содержимого метки, используя следующий код:
// ... invoke a cross-thread method to reset progress label information
Set_ProgressInfo("Reading data from input data file ... inputData");
Мой метод кросс-нити:
public void Set_ProgressInfo(string text)
{
if (this.progressInfo.InvokeRequired)
{
this.progressInfo.BeginInvoke(new MethodInvoker(delegate()
{ Set_ProgressInfo(text); }));
}
else
{
this.progressInfo.Text = text;
this.progressInfo.Location = new System.Drawing.Point(55, 595);
this.progressInfo.ForeColor = System.Drawing.Color.AliceBlue;
this.progressInfo.Font = new System.Drawing.Font("Verdana", 10.0f,
System.Drawing.FontStyle.Bold);
// Auto size label to fit the text
// ... create a Graphics object for the label
using (var g_progressInfo = this.progressInfo.CreateGraphics())
{
// ... get the Size needed to accommodate the formatted text
Size preferredSize_progressInfo = g_progressInfo.MeasureString(
this.progressInfo.Text, this.progressInfo.Font).ToSize();
// ... pad the text and resize the label
this.progressInfo.ClientSize = new Size(
preferredSize_progressInfo.Width + (BSAGlobals.labelTextPadding),
preferredSize_progressInfo.Height + (BSAGlobals.labelTextPadding));
}
}
}
Все отлично работает, как и должно, кроме:
Когда я изменяю размер шрифта в
this.progressInfo.Font = new System.Drawing.Font("Verdana", 10.0f,
System.Drawing.FontStyle.Bold);
с 10.0f до 8.0f, только часть строки «Чтение данных из файла входных данных ...» в вызывающем компоненте
Set_ProgressInfo("Reading data from input data file ... inputData");
дисплеи. По некоторым причинам размер вычисляется неправильно при меньшем размере шрифта. Я что-то здесь упускаю? Я уже давно борюсь с этим и просто не вижу причины этого. Любая помощь будет принята с благодарностью. Спасибо.