私の問題に関連するいくつかの質問があることを知っています。私はそれらをすべて勉強しましたが、まだそれを得ることはできないようです。 何かlike thisまたはlike thisメインスレッドの実行中に制御プロパティを変更するにはどうすればよいですか?
私は、FTP経由でいくつかのファイルをダウンロードする方法があります(約5秒かかります)。ボタンをクリックしてファイルをダウンロードすると、コントロールのプロパティを変更して、読み込み中のものが表示されるようにします。
このため、私はCircleProgressBarに "animated"プロパティをデフォルトでfalseに設定しています。以前のメソッドを呼び出すと、まずそのプロパティをtrueに変更し、ダウンロードが完了した後でfalseに戻す必要があります。
私は多くのソリューションを試みたが、無駄に:
void UpdateMessage(bool value)
{
Action action =() => DownloadLC_Normal_CircleProgressBar.animated = value;
Invoke(action);
}
private void DownloadLC_Normal_Button_Click(object sender, EventArgs e)
{
// try 1
//UpdateMessage(true);
// try 2
//DownloadLC_Normal_CircleProgressBar.Invoke((MethodInvoker)(() =>
//{
// DownloadLC_Normal_CircleProgressBar.animated = true;
//}));
// try 3
if (DownloadLC_Normal_CircleProgressBar.InvokeRequired)
{
DownloadLC_Normal_CircleProgressBar.BeginInvoke((MethodInvoker)delegate() { DownloadLC_Normal_CircleProgressBar.animated = true; });
}
else
{
DownloadLC_Normal_CircleProgressBar.animated = false;
}
// DOWNLOAD FILES THROUGH FTP BY CALLING A METHOD FROM A .cs FILE
// FROM THE PROJECT
//UpdateMessage(false);
//DownloadLC_Normal_CircleProgressBar.animated = false;
}
CircleProgressBarをアニメーション化することはありません。私は何が欠けていますか?私は間違って何をしていますか? :(
EDIT: コードの私の欠けている部分:最も簡単なオプションの
ftp ftpClient = new ftp("ftp://" + "192.168.1.200" + "/", "anonymous", "anonymous");
NetworkCredential credentials = new NetworkCredential("anonymous", "anonymous");
string url = "ftp://" + "192.168.1.200" + "/Documents and Settings/";
ftpClient.DownloadFtpDirectory(url, credentials, newDirectoryDownloadLocation);
ダウンロード方法はどこですか?私はあなたがダウンロードのUIスレッドをロックする同期呼び出しを行っていると思いますので、ダウンロードが完了するまでUIアップデートはありません。 –
これはスレッドの問題であるかどうかわかりません。ロジック問題のようなもの。あなたのDownloadLC_Normal_Button_ClickがUIイベントから呼び出されたように見えます - ボタンがクリックされたとき、そうですか?その場合、DownloadLC_Normal_CircleProgressBar.InvokeRequiredはfalseを返します。これは実行される唯一の行がDownloadLC_Normal_CircleProgressBar.animated = falseであることを意味します。私は、try/3セクションの2行にブレークポイントを置き、実際に何が実行されるかを確認することをお勧めします。お役に立てれば。 AB –
今私はこの行を見ましたが、それもそうかもしれません:else { DownloadLC_Normal_CircleProgressBar.animated = false;代わりにDownloadLC_Normal_CircleProgressBar.animated = trueにする必要があります。 –