2016/07/11

メモ:C# TaskからListBoxを触るとInvalidOperationExceptionが出る

https://msdn.microsoft.com/ja-jp/library/system.invalidoperationexception(v=vs.110).aspx

つまるところ処理は同じだが、Invokeが必要かどうかで触り方を変える必要がある。

example:
List<string> statusList = new List<string>();

private void StatusMessage(string mes)
{
    bool uiMarshal = ListBox1.InvokeRequired;

    statusList.Insert(0, DateTime.Now + " - " + mes);

    if (uiMarshal)
    {
        ListBox1.Invoke(new Action(() =>
        {
            ListBox1.Items.AddRange(statusList.ToArray());
        }));
    }
    else
    {
        ListBox1.Items.AddRange(statusList.ToArray());
    }
}

private async Task<bool> asyncWork()
{
    return await Task.Run(() =>
    {
        bool result = false;

//       なんらかの非同期処理        //

        StatusMessage("asyncWork END");
        return result;
    });
}

0 件のコメント:

コメントを投稿