1

私のWPFアプリケーションではOpenFileDialog、画像を選択してアプリにロードしていましたが、これは期待どおりに機能します。

しかし、フラッシュドライブから同じアプリを実行すると、UIフリーズ後に画像が読み込まれ、クリックするUIとアプリがクラッシュします。

manifestアプリの管理者もいます。

4

6 に答える 6

1

適切な説明が見つかりませんでしたが、有効なローカル パス (たとえば、Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) を使用して InitialDirectory を設定することで、この問題を解決しました。

于 2016-05-06T19:55:49.237 に答える
0

この場合OpenFileDialog、アプリがハングしてクラッシュします。

OpenFileDialogということで新スレに移動。そして、すべてがうまくいきます。

于 2012-12-03T07:12:31.817 に答える
0

ネットワークドライブから実行しているときに、これに似たものを見たことがあります。アプリケーションが完全に信頼できるソースからロードされていない場合、SecurityException が発生する可能性があります。

いずれにしても、例外が発生しているかどうかを確認できないコードの周りに try/catch ブロックを追加してみてください。

于 2012-12-02T06:56:51.350 に答える
0

この問題は、WPF だけでなく、WinForms でも発生 (クラッシュ) することがわかりました。問題の原因を特定するのは難しいですが、それでも OpenFileDialog 関連の Microsoft dll にバグがあるようです (私の場合、CmnDlg32.dll でした)。

ShowDialog() 関数を呼び出すことができる唯一の方法は、イベントでラップし、次の助けを借りて呼び出すことでした

this.BeginInvoke(
        new Action<YourObject, EventArgs>(YourObject_FileDialogOpened), new object[] 
                                                        { YourObjectInstance, e });

ここで、"this" はコントロール (フォームなど) です。

呼び出す BeginInvoke(...) 許可は、適切な方法で処理されます。

ボタンクリックイベントまたは他の同様のシナリオで OpenFileDialog の呼び出しを使用する場合、問題は発生しません。

于 2014-10-09T14:38:05.257 に答える
0

次のようなものを使用します。

Dispatcher.Invoke(new Action(() =>
            {
                using (SaveFileDialog fd = new SaveFileDialog())
                {
                    var json = JsonConvert.SerializeObject(arScene, Formatting.Indented);

                    var bytes = UTF8Encoding.UTF8.GetBytes(json); // or any byte array data

                    fd.Filter = "JSon files (*.json)|*.json|All files (*.*)|*.*|ARScene (*.ARScene)|*.ARScene";
                    fd.Title = "Save an ARScene File";
                    fd.AutoUpgradeEnabled = true;
                    fd.DefaultExt = "ARScene";
                    fd.OverwritePrompt = false;
                    fd.RestoreDirectory = true;
                    fd.SupportMultiDottedExtensions = true;
                    fd.CreatePrompt = false;

                    if (fd.ShowDialog() == DialogResult.OK)
                    {
                        if (fd.FileName != "")
                        {
                            FileStream fs = (FileStream)fd.OpenFile();
                            if (fs != null)
                            {
                                fs.Write(bytes, 0, bytes.Length);
                                fs.Close();
                            }

                        }
                    }
                    fd.Dispose(); // not needed, but save;-)
                }
}));
于 2018-11-07T19:49:48.407 に答える