システムトレイで起動するWindowsアプリケーションをNotifyIcon
として作成しようとしていて、イベントとユーザー入力に基づいていくつかのフォームが表示されます。私は私がしたので、何のVisual Studio 2013ApplicationContextスレッドとは別のスレッドからフォームを表示する方法
を使用してい は、VSが作成するデフォルトのフォームを削除し、MyApplicationContext
私は初期化ApplicationContext
を拡張するクラスですProgram.cs
からApplication.run()
とやったApplication.run(new MyApplicationContext())
を削除し、NotifyIcon
その後、私はデータベースに情報を問い合わせて、自分が作成したNotificationForm
の情報を表示しようとするワーカースレッドを作った。
私はwokerスレッドコードでこのような何かを行う場合は、次の
NotificationForm form = new form();
form.Top = // change the location;
form.show();
通知はデフォルトの位置で示し、その上に任意のUI要素が透明に見えると私はシースルーことができますデスクトップに
しかし、Application.run(form)
をワーカースレッドで呼び出すと、フォームは正しく機能し、正しい位置に表示されますが、ワーカースレッドはブロックされます。
Form
の場合は、Form
にはInvoke
と表示されます。しかし、私の場合は何をすべきですか?
EDIT:それは、それが見えないように上回避策としては、私はMyApplicationContext
その後と呼ばれるショーに呼ばForm
parentForm
を開始しました。それから私は呼びます。しかし、それは正しいものではなく汚れた作業のように見える。
なぜ私は下位投票に値するのですか? – vlatkozelka
新しいスレッドをスピンアップし、そのスレッドで 'Application.Run(form);'を実行しようとしましたか? –