-1

地獄私は BackgroundWork をコントロールに変換しようとしていますが、それは言う:

エラー 6 引数 1: 'System.ComponentModel.BackgroundWorker' から 'System.Windows.Forms.Control' に変換できません

ここにコードがあります

BackgroundWorker bw = new BackgroundWorker();
this.Controls.Add(bw);
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();

物事を機能させる方法は?

私は制御するためにbwをキャストしようとしますが、同じことを試してみます:

this.Controls.Add((this.Control)bw);
4

3 に答える 3

1

SOへようこそ!

この行を削除するだけです

this.Controls.Add(bw);

BackgroundWorkerから派生していないためControl、コレクションに追加することはできませControlsんが、とにかくこれを行う必要はありません。

于 2013-03-05T10:58:03.583 に答える
0

ワーカー オブジェクトをコントロール コレクションに追加する理由がわかりません...

電子メールを送信するには、オブジェクトDoWorkEventHandlerにバインドされているワーカー メソッドを渡すだけで済みます。すでに途中まで進んでいるようです。

BackgroundWorker bw = new BackgroundWorker();
this.Controls.Add(bw); //REMOVE THIS LINE
bw.DoWork += new DoWorkEventHandler(bw_DoWork);

//If your email relies on data from some object you can pass it in as a parameter
bw.RunWorkerAsync([email object]) 

次に、メールの送信を処理するワーカー メソッドを設定する必要があります。

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
     Email email = (Email)sender;
     //Send email
}

また、現在のジョブがいつ完了するかを知りたい場合もあります。その場合は、do work メソッド内で次のようなものを使用できます。

this.Invoke(new JobDone(ReportProgress), result);

次のように定義されたデリゲートを使用します。

private delegate void JobDone(Result result);

そして、ReportProgressメソッドは次のようになります:-

private void ReportProgress(Result result)
{

}
于 2013-03-05T11:13:10.467 に答える
0

BackgroundWorkerフォームのコントロールに a を追加する必要はありません。

それは独立して存在する単なるオブジェクトです。

于 2013-03-05T10:58:01.663 に答える