私はguiとリッチテキストボックスを持つアプリケーションを持っています。ここでは、データ処理がかなり長くなる可能性があるため、プログラムが現在行っていることを出力します。私はちょうど罰金以下のコードを呼び出すことができますBackgroundWorkerの方法でbackgroundworkerによって呼び出されたメソッド内からのプロセスの更新C#
1:
私はそのための2つのアプローチを試してみました
GlobalVar.backgroundWorkerAppendText = task.Build_CSV_List();
Processchange();
私が原因でない静的にヘルパークラスでForm1.Processchange();
を使用することはできませんのに対しコンテキスト
2私は非常に最初のイベントハンドラを作成しようとしました。
アイデアはhelper.UpdateConsoleは()イベント
public event EventHandler OnConsoleUpdate;
public void Consoleupdate()
{
OnConsoleUpdate(this, EventArgs.Empty);
}
を上げることだったのBackgroundWorkerがリッスンして、残念ながら、これが成功しなかったし、そのコンテキスト
public void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
StandardTasks task = new StandardTasks();
Helper helper = new Helper();
helper.OnConsoleUpdate += Processchange;
task.DoSomeStuffHere()
}
public void Processchange(object sender=null, EventArgs e=null)
{
//MessageBox.Show(GlobalVar.backgroundWorkerAppendText);
GlobalVar.next = false;
backgroundWorker1.ReportProgress(1);
while (GlobalVar.next == false)
{
helper.TimeBreaker(100,"ms");
}
}
からProcesschangeを呼び出すします。イベントが起きるとすぐに私はエラーのメッセージSystem.NullReferenceException
を取得します。その後、私たちはグーグル・グーグルでイベント事件に付随する犯人がいないという結論に至りました。
編集:OnConsoleUpdate()== nullのヘルパーは
下のスクリーンショットに示すように解決するために重要であるかもしれない別のクラスファイル「ヘルパー」です。
私はあなたが私を助けてくれることを願っています。
タスクベースの非同期パターンに切り替えるオプションです(TAP)?それから、ThreadPoolでTaskを開始し、Progressオブジェクトに渡すことができます。 Backgroundworkerを使いたい場合は、関連するコードをさらに表示する必要があります。 – Fildor
このバックグラウンドワーカーをどこから始めましたか?私はそれのような何かをしています:backgroundWorker1.RunWorkerAsync(); – Arkadiusz
ところで、いくつかのコードの臭いがある "GlobalVar"クラスを持っています... – Fildor