問題タブ [sta]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1532 参照

c# - STA スレッドが WPF のメイン ウィンドウをロードしていない

App_Startup() で MainWindow を読み込んでいます。ウィンドウの読み込み中に進行状況バーを表示したかったのです。しかし、それは機能していません:

スレッドからウィンドウをロードしたい:

0 投票する
1 に答える
6820 参照

powershell - Powershell -sta (アパートの状態) が優先されますか?

私は過去数か月間、Powershell (2.0) に手を出しており、それを使用して、作業中のプロセスの一部 (主に DOS ベースのプロセス) を最新化および標準化したいと考えています。作業の性質上、同じスクリプトが一度に約 100 回実行される可能性があります。

まず、Powershell はこの方法で使用しても「安全」ですか? -STA を実行オプションとして見たことがありますが、同じスクリプトを多数同時に実行するときに Powershell を使用するのに適した方法ですか、それとも絶対に必要な場合にのみ使用される方法ですか? 調べてみても、「いつマンションステイトを使えばいいの?」という答えがなかなか出てきません。私が行おうとしているスクリプトのすべてではないにしても、ほとんどはスレッド化されないと思います

Powershell のアパートの状態を明らかにできる方、よろしくお願いします。

0 投票する
1 に答える
1432 参照

c# - C# STAThread COMException

C# コードから呼び出したい外部コンポーネント (C++) があります。

コードは次のようなものです。

問題は、最初の呼び出しで、外部コンポーネントが呼び出され、結果が返されたことです。

しかし、別のスレッドでそれを呼び出そうとすると、例外が発生しました: System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' ... 。STAThread が原因で、この例外がスローされたと確信しています。Main 関数から [STAThread] 属性を削除すると、外部コンポーネントの最初の呼び出しでも同じことが発生し、正常に機能したためです。

この外部コンポーネントを他のスレッドから呼び出して、この例外を取り除くにはどうすればよいですか?

アップデート - - - - - - -

他のクレイジーなことが今起こっています。F5 を使用して Visual Studio からプログラムを起動すると、最初の呼び出しでも問題が発生しますが、バイナリ .exe ファイルを直接実行すると動作します (他のスレッドからは :( ではありません)。デバッグからリリースへのビルドと、F5 キーを使用して Visual Studio から開始すると、最初の呼び出しが再び機能します。

なぜそれが起こるのですか?

事前に助けてくれてありがとう!

よろしく、 ゾリ

0 投票する
3 に答える
7597 参照

r - 極座標からデカルト座標への分散行列

極座標の時系列を扱っており、予測にカルマン フィルターを適用しています。時系列は衛星軌道に関連しています。

ただし、分散の予測と推定は極座標 [r,theta] で表されます。

関数を使用して予測をデカルト座標に変換する方法を知っています

しかし、それは線形演算子ではないため、分散を処理する方法がわかりません。

変換を手伝っていただける場合は、データを順番に提供します。

そして、最初の予測の分散行列は次のとおりです。

最初の予測のためにデカルト座標でこの行列を取得する方法を知りたいです。ありがとう!

0 投票する
0 に答える
573 参照

clipboard - C#.net を使用して Office クリップ ボードにアクセスする

Visual Studio 2005 を使用して、c#.net を使用して「Windows サービス」を開発しています。私のコードでは、MS Office クリップボードにアクセスする必要があります。ただし、Clipboard クラスにアクセスしようとすると、デバッガーがエラーをスローします。

「OLE 呼び出しを行う前に、現在のスレッドをシングル スレッド アパートメント (STA) モードに設定する必要があります。Main 関数に STAThreadAttribute がマークされていることを確認してください。」

ランタイム中。解決策を確認したところ、メイン メソッドの前に「[STAThread]」を追加することで解決できることがわかりました。しかし、これを追加すると、コンパイルエラーが発生します

「型または名前空間名 'STAThread' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」

現在のバージョンの .NET (.NET 3.0) でクリップボードにアクセスできますか?

主なメソッドは「program.cs」というタイトルのファイルにあり、ロジックは「Service.cs」というタイトルのファイルにあります。クリップボードは Service.cs によって使用されます。

/* Program.cs */

/* Service.cs */

0 投票する
1 に答える
377 参照

c# - イベントが別のスレッドを生成するのを防ぐ

少し前に、この [Web サイト] [1] からデリゲートとイベントについて (まったく別の理由で) 読んでいましたが、そこで、イベントに十分な時間がかかる場合、別のスレッドが生成されるという印象を受けました。それで、修正できないように見えるバグについて考えさせられました。そこで、RS232 ポート経由で通信する MSR デバイス用のキーボード ウェッジ プログラムを作成しています。入力を処理するためにこのクラスを作成しました。

この ComPortInput クラスを開くと、DataReceived イベントをサブスクライブします。私が正しく推測している場合、遅延を十分に高く設定すると、データイベントによって新しいスレッドが作成されます。私のコードを見ると、問題が最もよく説明されると思います。

Program.cs

ComPortInput.cs。datareceived イベントのみ

SerialPortWedge.cs

FormattedHexStringOutput

このClipboard.Clear()エラーでプログラムがクラッシュする

OLE 呼び出しを行う前に、現在のスレッドをシングル スレッド アパートメント (STA) モードに設定する必要があります。Main 関数に STAThreadAttribute がマークされていることを確認します。

なぜこれをしているのか、私は途方に暮れています。現在のスレッドアパートの状態に時計を追加すると、それはMTAです。それでも、プログラムの開始時に休憩を入れると、それは STA であると表示されます。では、なぜ切り替わったのでしょうか。さらに困惑するのは、別の出力クラスを使用すると、そのエラーがスローされないことです

SendRawClipboardOutput.cs

これもそうじゃない

SendTrimClipboardOutput.cs

わからない..私は困惑しています。この問題に取り組む気がある人はいますか?

編集

だから助けを借りて、私はこれを私の解決策として思いつきました。SerialPortWedge はクラスであり、コントロールではないため、Invoke メソッドを呼び出すことができませんでした。SynchronizationContext.CurrentSerialPortWedgeに渡す必要がありました。したがって、私のメイン フォームでは、SerialPortWedge をインスタンス化した後にこれが表示されます。

次に、SerialPortWedge で、Input_DataAvailable をこれに変更しました

希望どおりに動作するようになりました。みんなの助けに感謝します。:)

0 投票する
0 に答える
34 参照

asp.net - COM からのイベント: WinForms/WPF では問題なく動作しますが、ASP.Net では動作しません。

以下が ASP.Net ではなく WinForms/WPF で正常に機能する理由を教えてください。

.Net 3.5 を対象としたクラス ライブラリがあります。参照される相互運用機能があります (TLB から生成されます)。

そして、MyClass の新しいインスタンスを作成し、Changed イベントをサブスクライブして Init() を呼び出す WinForms/WPF アプリケーション (.Net 4.5 を対象とする) があります。これは完全に機能します。

ASP.Net Web フォーム アプリケーションでも同じことをしようとしています。Init() メソッドが呼び出されていますが、MyClass の objCom_AvailabilityChanged イベントは決して発生しません。

私が間違っていることを説明してください。

どうもありがとう!