Формы должны локализоваться, прежде чем появиться. К тому, чтобы форма получил фан-объект, который используется для получения желаемого текста.
Метод, вызванный Func-объектом, является композитным для нативного кода.
Так что мне нравится это: < /p>
namespace FormsDll{
public class FrmBaseTrackingForm : System.Windiows.Forms
{
//needs to set by the caller to give some Text-Provider-Method
public Func? TextFromIDFunc { get; set; }
//1st approach: just a call to te com-Method
protected string GetText(int iTextId)
{
if (TextFromIDFunc == null) return "";
return TextFromIDFunc(iTextId);
}
//2nd approach: try to do it asynchronous from the GUI-Threak
//intentionally not marked as async because using Task.FromResult
protected Task GetTextAsync(int iTextId)
{
//call the provided Func to receive our text
if (TextFromIDFunc == null) return Task.FromResult("");
return Task.FromResult(TextFromIDFunc(iTextId));
}
//next one async and Task.Run
protected async Task GetTextAsync2(int iTextId)
{
if (TextFromIDFunc == null) return "";
return await Task.Run(() => TextFromIDFunc(iTextId));
}
protected override void OnShown(EventArgs e)
{
//Localize Controls, try to get the TExt in different ways
/*1*/
string sLocalized = GetText(id);
/*2*/
string sLocalized = GetTextAsync(id).GetAwaiter().GetResult();
/*3 and marking OnShown as async */
//string sLocalized = await GetTextAsync(id);
string sLocalized = GetText(42).GetAwaiter().GetResult();
button1.Text = sLocalized;
base.OnShown(e);
}
}
}
namespace CallingDll{
internal class SomeWorker{
internal static string Text(int iTextId)
{
return ComObjects.objLanguageManager.LoadString(iTextId);
}
private void DoWork(){
//has to Show the WinForm
FormsDll.FrmBaseTrackingForm errForm = new()
{
//set the Func to use to get some Texts
TextFromIDFunc = Text
};
errForm.ShowDialog();
}
}
}
< /code>
wo, что происходит, так это следующее:
, когда в 1-й с использованием / 1 < /em> /, кажется, работает, но я получаю сообщение в отладке Visual Studios- Окно:
"Ein ausgehender aufruf kann nicht ausgeführt werden, da die anwendung einen eingabe-synchronisierten aufruf weiterleitet." что переводится на «исходящий звонок не может быть выполнен, потому что приложение пересылает входной синхронизированный вызов». -Thread и должен быть асинхронным. Поэтому я попробовал код в/ 2 /и/ 3 /, но они ничего не изменили.
Все варианты, кажется, работают, но они также делают сообщение в Вывод-окно, который меня немного пугает.
Так как это сделать правильно?
Подробнее здесь: https://stackoverflow.com/questions/794 ... call-async
Создание Com-Call Async ⇐ C#
Место общения программистов C#
1739459479
Anonymous
Формы должны локализоваться, прежде чем появиться. К тому, чтобы форма получил фан-объект, который используется для получения желаемого текста.
Метод, вызванный Func-объектом, является композитным для нативного кода.
Так что мне нравится это: < /p>
namespace FormsDll{
public class FrmBaseTrackingForm : System.Windiows.Forms
{
//needs to set by the caller to give some Text-Provider-Method
public Func? TextFromIDFunc { get; set; }
//1st approach: just a call to te com-Method
protected string GetText(int iTextId)
{
if (TextFromIDFunc == null) return "";
return TextFromIDFunc(iTextId);
}
//2nd approach: try to do it asynchronous from the GUI-Threak
//intentionally not marked as async because using Task.FromResult
protected Task GetTextAsync(int iTextId)
{
//call the provided Func to receive our text
if (TextFromIDFunc == null) return Task.FromResult("");
return Task.FromResult(TextFromIDFunc(iTextId));
}
//next one async and Task.Run
protected async Task GetTextAsync2(int iTextId)
{
if (TextFromIDFunc == null) return "";
return await Task.Run(() => TextFromIDFunc(iTextId));
}
protected override void OnShown(EventArgs e)
{
//Localize Controls, try to get the TExt in different ways
/*1*/
string sLocalized = GetText(id);
/*2*/
string sLocalized = GetTextAsync(id).GetAwaiter().GetResult();
/*3 and marking OnShown as async */
//string sLocalized = await GetTextAsync(id);
string sLocalized = GetText(42).GetAwaiter().GetResult();
button1.Text = sLocalized;
base.OnShown(e);
}
}
}
namespace CallingDll{
internal class SomeWorker{
internal static string Text(int iTextId)
{
return ComObjects.objLanguageManager.LoadString(iTextId);
}
private void DoWork(){
//has to Show the WinForm
FormsDll.FrmBaseTrackingForm errForm = new()
{
//set the Func to use to get some Texts
TextFromIDFunc = Text
};
errForm.ShowDialog();
}
}
}
< /code>
wo, что происходит, так это следующее:
, когда в 1-й с использованием / 1 < /em> /, кажется, работает, но я получаю сообщение в отладке Visual Studios- Окно:
"Ein ausgehender aufruf kann nicht ausgeführt werden, da die anwendung einen eingabe-synchronisierten aufruf weiterleitet." что переводится на «исходящий звонок не может быть выполнен, потому что приложение пересылает входной синхронизированный вызов». -Thread и должен быть асинхронным. Поэтому я попробовал код в/ 2 /и/ 3 /, но они ничего не изменили.
Все варианты, кажется, работают, но они также делают сообщение в Вывод-окно, который меня немного пугает.
Так как это сделать правильно?
Подробнее здесь: [url]https://stackoverflow.com/questions/79436545/making-com-call-async[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия