1

私のasp.netアプリケーションでは、windows forms.dllを使用して、スレッドを作成することで一部のウィンドウコントロールを使用しています。これは私のシステムでは正常に機能しますが、IISでホストされている場合はセッションタイムアウトが発生します。スレッドを作成すると、IIS でセッション タイムアウトが発生します。IIS で正常に動作するスレッドを作成するにはどうすればよいですか?

以下は、iam がスレッドを作成したコードです。

public string[] DisplayFileDialog()
    {
        string[] result = null;

        try
        {
            Thread objThread = new Thread(state =>{
                result = FnOpenFileDialog();
                // TODO: do something with the returned result
            });

            objThread.IsBackground = false;
            objThread.SetApartmentState(ApartmentState.STA);
            objThread.Start();
            objThread.Join();
            return result;

        }
        catch (Exception ex)
        {


            return result;
        }

 protected string[] FnOpenFileDialog()
    {
        IntPtr hdlr = GetForegroundWindow();

        WindowWrapper Mockwindow = new WindowWrapper(hdlr);

        OpenFileDialog fDialog = new OpenFileDialog();

        fDialog.Title = "Select Files";

        fDialog.Multiselect = true;
        fDialog.CheckFileExists = true;
        fDialog.CheckPathExists = true;

        System.Windows.Forms.DialogResult dr = fDialog.ShowDialog(Mockwindow);
        string[] filenames = fDialog.FileNames;
        return filenames;
    }

前もって感謝します。

4

2 に答える 2

1

コードはサーバー側で実行されるため、タイムアウト応答によって停止します。メイン スレッドは、サーバー上で開かれたダイアログ ボックスの応答を待機します (objThread.Join)。クライアント側ではダイアログ ボックスが表示されず、応答が得られないためです。

クライアント側でダイアログ ファイルを開きたい場合は、ActiveX オブジェクトと同様の方法で開くことができます。

次のアドレスでそれを行う方法の msdn チュートリアルを見つけることができますが、IE でのみ機能します。

http://msdn.microsoft.com/fr-fr/magazine/cc301932(en-us).aspx

于 2012-10-04T14:00:49.097 に答える
0

私があなたの質問を正しく理解しているなら、答えは単純です:あなたはそれをすることはできません。

Windowsフォームコントロールはブラウザでは機能しません。ブラウザウィンドウがローカルであるため、スレッドがそれに接続して親として使用できるため、マシン上で機能します。

IISプロセスにはウィンドウがなく、テキスト、画像、およびビデオファイルのみを提供します。基本的に、別のサーバールームのあるマシンで実行されているIISスレッドに、他の誰かのマシンのブラウザーのウィンドウに接続して、Windowsフォームコントロールの表示を開始するように要求しています。

LinuxボックスまたはMacを使用している場合はどうなりますか?

ASP.NETは、IIS用のインタラクティブフォームを作成するというこの問題を解決するために作成されました。

お役に立てれば。

于 2012-10-04T13:52:50.707 に答える