�@

.NET TIPS

���Ԃ̂����鏈�����o�b�N�O���E���h�Ŏ��s����ɂ́H�m2.0�̂݁AC#�AVB�n

�f�W�^���A�h�o���e�[�W�@���� �F�M
2006/04/14

�@Windows�A�v���P�[�V�����ł́A���Ԃ̂����鏈���i�ȉ��A�d�������j�̓A�v���P�[�V�����̃��C���̃X���b�h�Ƃ͕ʂ̃X���b�h�ōs��Ȃ���΂Ȃ�Ȃ��B����͏d���������A�v���P�[�V�����̃��[�U�[�E�C���^�[�t�F�C�X�iUI�j���t���[�Y�����Ă��܂����炾�B

�@���Ƃ����[�U�[�����̏����̊����܂ő҂•K�v������Ƃ��Ă��A���̊ԂɃE�B���h�E�̈ړ���ŏ������ł��Ȃ���΂Ȃ�Ȃ����A�”\�ł���Ώ����̐i���傭�󋵂��v���O���X�E�o�[�Ȃǂŕ\�����ׂ��ł���B

�@.NET Framework 2.0�ł́A���̂悤�ȏ�����e�ՂɎ������邽�߂́uBackgroundWorker�R���|�[�l���g�v���V�����lj�����Ă���B������g���΃X���b�h���قƂ�Ljӎ����邱�ƂȂ��A�d��������ʃX���b�h�i�o�b�N�O���E���h�j�Ŏ��s�����邱�Ƃ��ł���B

�@�{�e�ł́ABackgroundWorker�R���|�[�l���g�𗘗p���A�i���傭�󋵂�\�����Ȃ���A�d���������o�b�N�O���E���h�Ŏ��s���邽�߂̕��@�ɂ‚��ĉ������B

�@�Ȃ�BackgroundWorker�R���|�[�l���g�ł́A�o�b�N�O���E���h�̏������L�����Z�����ēr���Œ��~���邱�Ƃ��ł���B����ɂ‚��Ă͕ʍe�uTIPS�F�o�b�N�O���E���h������r���ŃL�����Z������ɂ́H�v�ʼn�����Ă���̂ŕ����ĎQ�Ƃ��Ă������������B

BackgroundWorker�R���|�[�l���g�̔z�u

�@�ȉ��ł́AVisual Studio 2005�ŃT���v���E�A�v���P�[�V�������쐬���Ȃ���BackgroundWorker�R���|�[�l���g�̎g�����ɂ‚��Đ������Ă����B

�@�܂��AWindows�A�v���P�[�V�����̃v���W�F�N�g��V�K�쐬���A�ȉ��̉�ʂ̂悤�Ɂm�X�^�[�g�n�{�^����ProgressBar�R���g���[���A������BackgroundWorker�R���|�[�l���g��z�u����B�����ăv���p�e�B�E�E�B���h�E�ŁA���ꂼ���Name�v���p�e�B���ustartButton�v�uprogressBar�v�ubgWorker�v�ɐݒ肷��B


BackgroundWorker�R���|�[�l���g��z�u����Windows�t�H�[��
�i���傭�󋵂�\�����邽�߂ɂ́ABackgroundWorker�R���|�[�l���g��WorkerReportsProgress�v���p�e�B��true�ɐݒ肵�Ă����B

�@�����BackgroundWorker�R���|�[�l���g�ɂ‚��ẮA�i���傭�󋵂�\�����邽�߂�WorkerReportsProgress�v���p�e�B��true�ɐݒ肷��B

�@���̃T���v���E�v���O�����ł́A�m�X�^�[�g�n�{�^�����N���b�N�����ƁA�d���������J�n���A���̐i���傭�󋵂�ProgressBar�R���g���[���̃o�[�ƁA�^�C�g���o�[�̕����Ŏ����B�܂��A�����������ɂ̓��b�Z�[�W�{�b�N�X��\������B

BackgroundWorker�R���|�[�l���g�̓���

�@BackgroundWorker�R���|�[�l���g�ɑ΂��ẮA����3�‚̃C�x���g�E�n���h���̒lj����K�v�ƂȂ�i�ڍׂ͊������邪�A�C�x���g�E�n���h���̒lj���C#�ł̓v���p�e�B�E�E�B���h�E����AVB�ł̓R�[�h��ʏ㕔����ȒP�ɍs����j�B

�d���������s��DoWork�C�x���g�E�n���h���i�ʃX���b�h�Ŏ��s�����j
�i���傭�󋵂�\�����邽�߂�ProgressChanged�C�x���g�E�n���h��
�����������Ɏ��s�����RunWorkerCompleted�C�x���g�E�n���h��

�@�d�������̎��s�J�n���珈�������܂ł̗���͎��̂悤�ɂȂ�B

  1. BackgroundWorker�R���|�[�l���g��RunWorkerAsync���\�b�h���Ăяo�����Ƃɂ��A �����s�����B���̂Ƃ��Ƀp�����[�^��n���΁A �ł́ue. Argument�v*1�Ƃ��Ď󂯎�邱�Ƃ��ł���B

  2. �̏d�������̊Ԃ�BackgroundWorker�R���|�[�l���g��ReportProgress���\�b�h��K���Ăяo�����Ƃɂ��A �����s�����B���\�b�h�̃p�����[�^�ɂ͐i���傭�󋵂����������l���w�肷��B �ł́ue. ProgressPercentage�v*2�ɂ��A���̒l���󂯎�邱�Ƃ��ł���B

  3. �̏d����������������΁i�C�x���g�E�n���h���̎��s���I������΁j�A �����s�����B �ŏ������ʂ��ue.Result�v*3�ɑ�����Ă����΁A �Łue.Result�v*4�ɂ�肻�̒l���󂯎�邱�Ƃ��ł���B

*1 �ue�v��DoWorkEventArgs�N���X�̃I�u�W�F�N�g�B
*2 �ue�v��ProgressChangedEventArgs�N���X�̃I�u�W�F�N�g�B
*3 �ue�v��DoWorkEventArgs�N���X�̃I�u�W�F�N�g�B
*4 �ue�v��RunWorkerCompletedEventArgs�N���X�̃I�u�W�F�N�g�B
�� ������̃N���X��System.ComponentModel���O��Ԃɑ�����B

�T���v���E�A�v���P�[�V�����̃\�[�X�E�R�[�h

�@����̃T���v���E�v���O�����ł́A�m�X�^�[�g�n�{�^����Click�C�x���g�E�n���h���ŁARunWorkerAsync���\�b�h���Ăяo���āA ��DoWork�C�x���g�E�n���h���̎��s���J�n����B

�@�܂��A ��ProgressChanged�C�x���g�E�n���h���ł́AProgressBar�R���g���[����Value�v���p�e�B�ɐi���傭���������l�������ăo�[�̍X�V���s���B

�@�ȉ��ɁA�T���v���E�A�v���P�[�V�����̃\�[�X�E�R�[�h�������iForm1.cs�^Form1.vb�̂݁B�\�����[�V�����S�̂̓��X�g�̋r������_�E�����[�h�j�B

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace BGWorker1 {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    // �m�X�^�[�g�n�{�^���̃C�x���g�E�n���h��
    private void buttonStart_Click(object sender, EventArgs e) {
      buttonStart.Enabled = false;

      // ���Ԃ̂����鏈����ʃX���b�h�ŊJ�n
      bgWorker.RunWorkerAsync(100);
      // DoWork�C�x���g����
    }

    // ���Ԃ̂����鏈�����s�����\�b�h
    private void bgWorker_DoWork(object sender, DoWorkEventArgs e) {
      // �ʃX���b�h�Ŏ��s����邽�߁A���̃��\�b�h�ł�
      // UI�i�R���g���[���j�𑀍삵�Ă͂����Ȃ�

      // ���̃��\�b�h�ւ̃p�����[�^
      int bgWorkerArg = (int)e.Argument;

      // sender�̒l��bgWorker�̒l�Ɠ���
      BackgroundWorker worker = (BackgroundWorker)sender;

      // ���Ԃ̂����鏈��
      for (int i = 0; i < bgWorkerArg; i++) {

        System.Threading.Thread.Sleep(100);

        int percentage = i * 100 / bgWorkerArg; // �i���傭��
        worker.ReportProgress(percentage);
        // ProgressChanged�C�x���g����
      }
      // ���̃��\�b�h����̖߂�l
      e.Result = "���ׂĊ���";

      // ���̌�ARunWorkerCompleted�C�x���g������
    }

    private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) {
      // �i���傭�󋵂̕\��
      this.Text = e.ProgressPercentage + "������";
      progressBar.Value = e.ProgressPercentage;
    }

    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
      // �������ʂ̕\��
      this.Text = e.Result.ToString();
      MessageBox.Show("����Ɋ���");

      buttonStart.Enabled = true;
    }
  }
}
Imports System.ComponentModel

Public Class Form1

  ' �m�X�^�[�g�n�{�^���̃C�x���g�E�n���h��
  Private Sub buttonStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonStart.Click
    buttonStart.Enabled = False

    ' ���Ԃ̂����鏈����ʃX���b�h�ŊJ�n
    bgWorker.RunWorkerAsync(100)
    ' DoWork�C�x���g����
  End Sub

  ' ���Ԃ̂����鏈�����s�����\�b�h
  Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
    ' �ʃX���b�h�Ŏ��s����邽�߁A���̃��\�b�h�ł�
    ' UI�i�R���g���[���j�𑀍삵�Ă͂����Ȃ�

    ' ���̃��\�b�h�ւ̃p�����[�^
    Dim bgWorkerArg As Integer = CType(e.Argument, Integer)

    ' sender�̒l��bgWorker�̒l�Ɠ���
    Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)

    ' ���Ԃ̂����鏈��
    For i As Integer = 1 To bgWorkerArg

      System.Threading.Thread.Sleep(100)

      Dim percentage As Integer = i * 100 / bgWorkerArg ' �i���傭��
      worker.ReportProgress(percentage)
      ' ProgressChanged�C�x���g����
    Next

    ' ���̃��\�b�h����̖߂�l
    e.Result = "���ׂĊ���"

    ' ���̌�ARunWorkerCompleted�C�x���g������
  End Sub

  Private Sub bgWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgWorker.ProgressChanged
    ' �i���傭�󋵂̕\��
    Me.Text = e.ProgressPercentage & "������"
    progressBar.Value = e.ProgressPercentage
  End Sub

  Private Sub bgWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgWorker.RunWorkerCompleted
    ' �������ʂ̕\��
    Me.Text = e.Result.ToString()
    MessageBox.Show("����Ɋ���")

    buttonStart.Enabled = True
  End Sub
End Class
�i���傭�󋵂�\�����Ȃ���d���������s���T���v���E�v���O�����i��FForm1.cs�A���FForm1.vb�j

�@���ӂ��ׂ��́ADoWork�C�x���g�E�n���h�������͕ʃX���b�h�Ŏ��s����邽�߁A���̃��\�b�h���ŃR���g���[���̃v���p�e�B�⃁�\�b�h�𑀍삵�Ă͂����Ȃ��Ƃ����_���i���̂悤�ȑ�����s����.NET Framework 2.0�ł͗�O����������j�B

�@�܂��ADoWork�C�x���g�E�n���h�����s���ɁA�����RunWorkerAsync���\�b�h���Ăяo�����Ƃ͂ł��Ȃ��i��O����������j�B���ꂪ���s�����ǂ�����IsBusy�v���p�e�B�ɂ��m�F�ł���B����̃T���v���E�v���O�����ł́A�{�^���̗L���^������؂�ւ��đ��d�Ȏ��s���֎~���Ă���BEnd of Article

���p�”\�o�[�W�����F.NET Framework 2.0�̂�
�J�e�S���FWindows�t�H�[���@�����ΏہF�X���b�h
�g�p���C�u�����FBackgroundWorker�R���|�[�l���g�iSystem.ComponentModel���O��ԁj
�g�p���C�u�����FDoWorkEventArgs�N���X�iSystem.ComponentModel���O��ԁj
�g�p���C�u�����FProgressChangedEventArgs�N���X�iSystem.ComponentModel���O��ԁj
�g�p���C�u�����FRunWorkerCompletedEventArgs�N���X�iSystem.ComponentModel���O��ԁj
�֘ATIPS�F�o�b�N�O���E���h������r���ŃL�����Z������ɂ́H

���̋L���Ɗ֘A���̍����ʂ�.NET TIPS
�o�b�N�O���E���h������r���ŃL�����Z������ɂ́H
WPF�^Windows�t�H�[���F���Ԃ̂����鏈�����o�b�N�O���E���h�Ŏ��s����ɂ́H�iasync�^await�ҁj�mC#�^VB�n
Windows�t�H�[���ŕʃX���b�h����R���g���[���𑀍삷��ɂ́H
WPF�FDataGrid��ListView�Ȃǂɕ\�����Ă���f�[�^��ʃX���b�h����ύX����ɂ́H
�V�X�e���g���C�i�^�X�N�g���C�j�ɃA�C�R����\������ɂ́H
���̃��X�g�́A�i���j�f�W�^���A�h�o���e�[�W���J������
�����֘A�L���T���V�X�e�� Jigsaw�i�W�O�\�[�j �ɂ�莩�����o�������̂ł��B
generated by

�u.NET TIPS�v


Insider.NET �t�H�[���� �V���L��
  • ��2��@�Ȍ��ȃR�[�f�B���O�̂��߂� �i2017/7/26�j
    �@�����_���ŋL�q�ł��郁���o�̑����Athrow���Aout�ϐ��A�^�v���ȂǁAC# 7�ɂ͈ȑO�����R�[�h���Ȍ��ɋL�q�ł���悤�ȋ@�\����������Ă���
  • ��1��@Visual Studio Code�f�o�b�O�̊�b�m�� �i2017/7/21�j
    �@Node.js�v���O�������f�o�b�O���Ȃ���AVisual Studio Code�ɓ�������Ă���f�o�b�O�@�\�̊�{�́u�L�v���}�X�^�[���悤
  • ��1��@���ĂȃR�[�f�B���O�̂��߂� �i2017/7/19�j
    �@C# 7�Œlj����ꂽ�V�@�\�̒�����A�u���l���e�����\���̉��P�v�Ɓu���[�J���֐��v���Љ��B�����͕�����₷���R�[�h���L�q����̂Ɏg����
  • Presentation Translator �i2017/7/18�j
    �@Presentation Translator��PowerPoint�p�̃A�h�C���B�v���[���e�[�V�������̎����̕t����A������ł̎��^�����A�X���C�h�̖|����s����
��IT���[���}�K�W���@�V������X�^�b�t�̃R���������[���œ͂��܂��i�����j

���ڂ̃e�[�}

Insider.NET �L�������L���O

�{�� ����