| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==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(() =&gt;
 
         {
 
         {
 
             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);
            }
        });
    }
}