WPFボタンをクリックしたときのメソッドがうまく実行されない

バルテーザー

これは私のXAMLパーツコードです:

<DockPanel Margin="1 5 1 0" Height="25">
    <Button DockPanel.Dock="Right" Width="70" Margin="6 0 0 0" Content="Install" Click="Install" />
    <Button DockPanel.Dock="Right" Width="70" Margin="6 0 0 0" Content="Uninstall"/>
    <ProgressBar Name="progressBar"/>
</DockPanel>

そしてこれはインストール方法です:

private void Install(object sender, RoutedEventArgs e)
{
    progressBar.Value = 5;

    installer.InstallProgram1();

    progressBar.Value = 25;

    installer.InstallProgram2();

    progressBar.Value = 50;

    installer.InstallProgram3();

    progressBar.Value = 75;

    installer.InstallProgram4();

    progressBar.Value = 100;
}

インストールボタンをクリックすると、Installメソッドが実行されますが、正しく実行されません。
-最初の行は実行されません: 'progressBar.Value = 5'。
--2行目はうまく機能します。
-そして何も機能しなかった後。

メソッドを「MessageBox.Show( "HelloWorld")」に置き換えようとしましたが、機能し、プログレスバーの値が変わります。

しかし、なぜそれが私の方法では機能しないのですか?
'installer.InstallProgram2()'が機能しない/終了しないのはなぜですか?

私の2つの方法は、Installer.csファイル内にあります。

public void InstallProgram1()
{
    // Download the lavfilters executable.
    var url = "http://www.videohelp.com/software/LAV-Filters";
    var selector = "a.linktool:nth-child(12)";
    var filename = downloader.DownloadFromVideoHelp(url, selector);

    // TODO: Installation
}

public void InstallProgram2()
{
    // Download the madVR archive
    var url = "http://www.videohelp.com/software/madVR";
    var selector = ".linktool";
    var filename = downloader.DownloadFromVideoHelp(url, selector);

    // TODO: Installation
}
ピーター・ドゥニホ

なければ良い、最小限の完全なコード例、確かにあなたの問題を解決する最善の方法を知ることは不可能です。しかし、助けるためにいくつかのアドバイスを与えることができます。

まず、次のように書きます。

最初の行は実行されません: 'progressBar.Value = 5'。

それは単に誤りです。デバッガーはあなたに多くを教えてくれます。メソッドの最初のステートメントが残りのステートメントの実行中にスキップされる可能性はありません。

メソッド内の残りのステートメントについては、機能する場合と機能しない場合があります。繰り返しになりますが、完全なコード例がないため、StackOverflowの誰もがそれについてコメントすることさえできません。

私が言えることは、投稿したコードは、割り当てられたステートメントが実行されていないように見えるprogressBar.Valueことです。これは、UIスレッドでこれらのステートメントを実行しているため、そのスレッドが画面全体の更新を実行できないためです。メソッドが完了しました。

されている可能性があり、すべてのあなたのコードに問題があること。もしそうなら、このように見えるようにメソッドを変更すると役立つはずです:

private async void Install(object sender, RoutedEventArgs e)
{
    progressBar.Value = 5;

    await Task.Run(() => installer.InstallProgram1());

    progressBar.Value = 25;

    await Task.Run(() => installer.InstallProgram2());

    progressBar.Value = 50;

    await Task.Run(() => installer.InstallProgram3());

    progressBar.Value = 75;

    await Task.Run(() => installer.InstallProgram4());

    progressBar.Value = 100;
}

上記の機能は、さまざまな「インストーラー」メソッドを別のスレッドで実行することです。新しい(.NET 4.5以降)async/await機能を使用して、UIスレッドとタスク間の対話を簡素化します。メソッド自体のすべてのコードは引き続きUIスレッドで実行されますが、「インストーラー」メソッドを呼び出す(現在の)匿名メソッドはスレッドプールを使用して実行されます。

C#はInstall()awaitステートメントメソッドから戻り、UIスレッドが正常に動作し続けることを可能にします(たとえば、の新しい値を反映するようにUIを更新しますProgressBar)。各タスクが完了すると、制御はそのタスクのステートメントのInstall()後にメソッドに戻りawaitます。これは、メソッドが通常のリターンポイント(returnステートメント、またはここではメソッド本体の終わりなど)に到達するまで繰り返されます。

異なるスレッドでコードを実行する際の通常の落とし穴に注意してください。投稿したコード例には、「インストーラー」メソッドを別のスレッドで実行できないことを示唆するものは何もありませんが、コード例は完全にはほど遠いため、それほど多くのことを言っているわけではありません。対処すべき並行性の問題があると思われる場合は、問題の例を、それらの問題を十分に説明する適切なコード例(上記のリンクを参照)に減らし、それらの問題について具体的に尋ねる新しい質問を投稿してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ボタンがクリックされたときにメソッドを実行する

分類Dev

ボタンがクリックされたときにメソッド ポストが機能しない

分類Dev

WPF DataGridで編集ボタンがクリックされたときに現在の行を取得しますか?

分類Dev

Angular:別のボタンをクリックして実行されたSubmitメソッド

分類Dev

Intellijを介したデバッグ中にJbuttonがクリックされたときに実行されるメソッドにジャンプします

分類Dev

ボタンがクリックされてコマンドが実行されると、複数のテキストボックスで明示的なWpf更新ソーストリガーが発生します。MVVMシナリオの場合

分類Dev

キャッシングがボレーに実装されている場合、ボレーがPOSTリクエストメソッドでキャッシュされたパラメーターを送信しないようにします

分類Dev

JCheckBoxをクリックしたときに実行されるメソッド

分類Dev

異なるボタンがクリックされたときに関数の実行を分離する方法

分類Dev

異なるボタンがクリックされたときに関数の実行を分離する方法

分類Dev

ボタンがクリックされたときにng-includeを実行します-Angularjs

分類Dev

上ボタンを押したときに実行されるメソッド

分類Dev

クリックされたボタンイベントで他のタスクを実行しているときにメインウィンドウを閉じるにはどうすればよいですか?

分類Dev

キーボードがドッキング解除されたときに実行されるスクリプトの作成を手伝ってください

分類Dev

.successが機能したと表示しているのに、削除ボタンをクリックしてもクエリが実行されない

分類Dev

Javaでスレッドクラスのrunメソッドが正常に実行されたときにのみメソッドを呼び出します。破壊前のロジックのようなもの

分類Dev

実行可能なJARにエクスポートしようとしたときにEclipseがメインメソッドを見つけられない

分類Dev

メソッドがトランザクション内で実行されているかどうかに関係なく、自動コミットをオンまたはオフにしてデータソースを挿入する方法

分類Dev

戻るボタンが2回クリックされたときにXamarin.Androidアプリを終了させるにはどうすればよいですか(クリック間のメッセージを確認してください)?

分類Dev

Libgdx | Scene2d | 非表示のボタンをクリックしたときにtouchDown入力プロセッサメソッドが起動しない

分類Dev

メソッドをスパイすると、モックされたメソッドではなく実際のメソッドが呼び出されます

分類Dev

Javaでボタンをクリックしたときに他のクラスからメソッドを実行する方法を誰かが知っていますか

分類Dev

スクリプトの実行時ではなく、ボタンが押されたときに関数を実行します

分類Dev

ボタンがクリックされたときではなく、値が変更されたときに関数を実行するにはどうすればよいですか?

分類Dev

トークンが無効または予期しないため、Javascriptメソッドが実行されない

分類Dev

ボタンがクリックされたときにJavaメソッドを呼び出す

分類Dev

別のボタンがクリックされたときにボタンに何かを表示させようとしています(C#)

分類Dev

配列内のボタンがクリックされたときの関数を実行するにはどうすればよいですか?

分類Dev

Firebase-ボタンがクリックされたときにクラウド関数で「functions.https」を実行します

Related 関連記事

  1. 1

    ボタンがクリックされたときにメソッドを実行する

  2. 2

    ボタンがクリックされたときにメソッド ポストが機能しない

  3. 3

    WPF DataGridで編集ボタンがクリックされたときに現在の行を取得しますか?

  4. 4

    Angular:別のボタンをクリックして実行されたSubmitメソッド

  5. 5

    Intellijを介したデバッグ中にJbuttonがクリックされたときに実行されるメソッドにジャンプします

  6. 6

    ボタンがクリックされてコマンドが実行されると、複数のテキストボックスで明示的なWpf更新ソーストリガーが発生します。MVVMシナリオの場合

  7. 7

    キャッシングがボレーに実装されている場合、ボレーがPOSTリクエストメソッドでキャッシュされたパラメーターを送信しないようにします

  8. 8

    JCheckBoxをクリックしたときに実行されるメソッド

  9. 9

    異なるボタンがクリックされたときに関数の実行を分離する方法

  10. 10

    異なるボタンがクリックされたときに関数の実行を分離する方法

  11. 11

    ボタンがクリックされたときにng-includeを実行します-Angularjs

  12. 12

    上ボタンを押したときに実行されるメソッド

  13. 13

    クリックされたボタンイベントで他のタスクを実行しているときにメインウィンドウを閉じるにはどうすればよいですか?

  14. 14

    キーボードがドッキング解除されたときに実行されるスクリプトの作成を手伝ってください

  15. 15

    .successが機能したと表示しているのに、削除ボタンをクリックしてもクエリが実行されない

  16. 16

    Javaでスレッドクラスのrunメソッドが正常に実行されたときにのみメソッドを呼び出します。破壊前のロジックのようなもの

  17. 17

    実行可能なJARにエクスポートしようとしたときにEclipseがメインメソッドを見つけられない

  18. 18

    メソッドがトランザクション内で実行されているかどうかに関係なく、自動コミットをオンまたはオフにしてデータソースを挿入する方法

  19. 19

    戻るボタンが2回クリックされたときにXamarin.Androidアプリを終了させるにはどうすればよいですか(クリック間のメッセージを確認してください)?

  20. 20

    Libgdx | Scene2d | 非表示のボタンをクリックしたときにtouchDown入力プロセッサメソッドが起動しない

  21. 21

    メソッドをスパイすると、モックされたメソッドではなく実際のメソッドが呼び出されます

  22. 22

    Javaでボタンをクリックしたときに他のクラスからメソッドを実行する方法を誰かが知っていますか

  23. 23

    スクリプトの実行時ではなく、ボタンが押されたときに関数を実行します

  24. 24

    ボタンがクリックされたときではなく、値が変更されたときに関数を実行するにはどうすればよいですか?

  25. 25

    トークンが無効または予期しないため、Javascriptメソッドが実行されない

  26. 26

    ボタンがクリックされたときにJavaメソッドを呼び出す

  27. 27

    別のボタンがクリックされたときにボタンに何かを表示させようとしています(C#)

  28. 28

    配列内のボタンがクリックされたときの関数を実行するにはどうすればよいですか?

  29. 29

    Firebase-ボタンがクリックされたときにクラウド関数で「functions.https」を実行します

ホットタグ

アーカイブ