0

この関数を実装したいと思います: http 要求を受信すると、新しいウィンドウ フォームを作成し、ユーザーが応答テキストを入力して http 応答ストリームに書き込むのを待ちます。問題は、 Action<> デリゲートを使用しても、スレッド内のストリームに応答テキストを書き込むことができないということです。次のようなコード:

public partial class MainWindow : Window
{
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        //startup web server 
        Dispatcher.BeginInvoke(new Action(Start));
    }

    private void Start()
    {
        var server = new HttpServer();
        try
        {
            server.EndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80);
            server.Start();
            server.RequestReceived += DataProcess;
        }
        catch (Exception ex)
        {
            return;
        }
    }

    private void DataProcess(object sender, HttpRequestEventArgs e)
    {
        //create a new window in which user can input the response for the http request e.
        var pw = (PrivateWindow)Dispatcher.Invoke(new Func<HttpRequestEventArgs, PrivateWindow>(CreatePrivateWindow), e);
    }

    public PrivateWindow CreatePrivateWindow(string windowKey, HttpRequestEventArgs e)      
    {
        var pw = new PrivateWindow(); 
        pw.httpRequest = e;//pass the stream to thread here.       
        windows.Add(pw);
        return pw;    
    }
}

public partial class PrivateWindow : Window
{
    private void btnSendMessage_Click(object sender, RoutedEventArgs e)
    {
        string messageText = new TextRange(txtWriteMessage.Document.ContentStart, txtWriteMessage.Document.ContentEnd).Text.Trim(); 
        //write the response in thread           
        Dispatcher.BeginInvoke(new Action<HttpRequestEventArgs, string>(WriteToStream), httpRequest, messageText);
    }
    private void WriteToStream(HttpRequestEventArgs e, string str)
    {
        //**here occurs "stream can not be written" error.** 
        using (var writer = new StreamWriter(e.Response.OutputStream))
        {
            writer.Write(str);
        }
    }
} 
4

0 に答える 0