0
不透明度の値を操作してGUI上のコントロールを透過的に設定したいと思います。イベント上の別のクラスBackgroundWorkerでWPF-GUI-Changesを呼び出す際の例外
soundController = new SoundController();
soundController.VolumeChanged +=new SoundController.VolumeChangedEventHandler(VolumeChanged);
によってトリガされたイベントのために、私のGUIの待機をその後
volumeWorker = new BackgroundWorker();
volumeWorker.DoWork += new DoWorkEventHandler(VolumeBarDoWork);
volumeWorker.ProgressChanged += new ProgressChangedEventHandler(VolumeBarChanged);
volumeWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(VolumeBarCompleted);
volumeWorker.WorkerReportsProgress = true;
:したがって 、私は私のようなWPFフォームのコンストラクタにBackgroundWorker
初期化ハンドラ私は最終的にGUIを操作するためにvolumeWorker(BGW)を開始します:
private void VolumeChanged(float pVolume)
{
Logger.InfoWrite("Event raised ## New volume : {0}", pVolume);
volumeWorker.RunWorkerAsync();
}
しかしBackgroundWorkers ChangeEventの上に、私はInvalidOperatioを得ました毎回誰かにアイデアがあったのですか?
private void VolumeBarDoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
Logger.InfoWrite("Worker");
for(int _opacity = 99 ; _opacity >= 0 ; _opacity--)
{
Logger.InfoWrite("Start on {0}", _opacity);
worker.ReportProgress(_opacity);
System.Threading.Thread.Sleep(20)
}
e.Result = e.Argument;
}
private void VolumeBarChanged(object sender, ProgressChangedEventArgs e)
{
this.volumeBar.Opacity -= 0.01f;
Logger.InfoWrite("Changed opacity to : {0} on {1}", this.volumeBar.Opacity, e.ProgressPercentage);
}
private void VolumeBarCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Logger.InfoWrite("Completed");
this.volumeBar.Opacity = 0.0f;
}
私を助けてくれてありがとう、それは働いた:-) – Kooki