「C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==C# 非同期処理からUIスレッドにアクセスし画面を更新する== [C#] ===例=== *Task と Invoke と Delegete を利用 public partial class Form1…」) |
(→例) |
||
| (同じ利用者による、間の4版が非表示) | |||
| 1行目: | 1行目: | ||
| − | ==C# 非同期処理からUIスレッドにアクセスし画面を更新する== | + | ==[[C# 非同期処理からUIスレッドにアクセスし画面を更新する]]== |
| − | [C | + | [[C Sharp]] | |
| + | |||
| + | ===例=== | ||
| + | <pre>public partial class MainForm : Form | ||
| + | { | ||
| + | |||
| + | public MainForm() | ||
| + | { | ||
| + | } | ||
| + | |||
| + | private async void btnHoge_Click(object sender, EventArgs e) | ||
| + | { | ||
| + | await CrawlGuppy(); | ||
| + | } | ||
| + | |||
| + | private async Task CallBusyService() | ||
| + | { | ||
| + | |||
| + | IProgress<string> progress = new Progress<string>(msg => | ||
| + | { | ||
| + | lblStatus.Text = $"処理中・・・{msg}"; | ||
| + | }); | ||
| + | |||
| + | await Task.Run(() => | ||
| + | { | ||
| + | (new Service()).DoBusyTask(progress, "some parameter"); | ||
| + | }); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public class Service() | ||
| + | { | ||
| + | public void DoBusyTask(IProgress<string> progress, string param) | ||
| + | { | ||
| + | progress.Report("Message"); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </pre> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
===例=== | ===例=== | ||
| 15行目: | 59行目: | ||
public void DoAsyncTaskButton_Click() | public void DoAsyncTaskButton_Click() | ||
{ | { | ||
| − | Task task = Task.Factory.StartNew(() = | + | Task task = Task.Factory.StartNew(() => |
{ | { | ||
while (true) | while (true) | ||
2021年9月15日 (水) 12:59時点における最新版
C# 非同期処理からUIスレッドにアクセスし画面を更新する
C Sharp |
例
public partial class MainForm : Form
{
public MainForm()
{
}
private async void btnHoge_Click(object sender, EventArgs e)
{
await CrawlGuppy();
}
private async Task CallBusyService()
{
IProgress<string> progress = new Progress<string>(msg =>
{
lblStatus.Text = $"処理中・・・{msg}";
});
await Task.Run(() =>
{
(new Service()).DoBusyTask(progress, "some parameter");
});
}
}
public class Service()
{
public void DoBusyTask(IProgress<string> progress, string param)
{
progress.Report("Message");
}
}
例
- Task と Invoke と Delegete を利用
public partial class Form1 : Form
{
public delegate void UpdateStatusHandler(string msg);
public void UpdateStatus(string msg)
{
lblStatus.Text = msg;
}
public void DoAsyncTaskButton_Click()
{
Task task = Task.Factory.StartNew(() =>
{
while (true)
{
string msg = ""; // some messages
lblStatus.Invoke(new UpdateStatusHandler(UpdateStatus), msg);
}
});
}
}
© 2006 矢木浩人