2016-12-13 7 views
0

C#WebFormアプリケーションでバックグラウンドスレッドを使用しようとしています(これはWindowsフォームの問題ではありません)。スレッドは、TCP/IP接続を監視して、受信側に表示されるデータを探します。データが表示されたら、私は自分のウェブページのテキストボックスにそれを書きたいと思っています。問題は、このスレッドからテキストボックスに書き込もうとすると、実際にテキストボックスに書き込まれずにWebページが読み込まれるということです。私はこれがクロススレッドの問題であり、ページロードの問題ではないことを知っています。バックグラウンドスレッドからWebページのテキストボックスにデータを転送

私のプログラムは、Webページをレンダリングする前に、データが "テキストボックス"に書き込まれるのを待ちます。私はデリゲートを使ってみましたが、うまくいきませんでした。また、私は解決策を探し求めましたが、ほとんどの回答はWindows FormsとWebFormsの扱いが異なるようです。

私のC#WebFormアプリケーションでは、Webページのテキストボックスにロードできるように、バックグラウンドスレッドで作成されているデータにアクセスするにはどうすればよいですか?

Thread ipThread; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    ipThread = new Thread(() => ipSocketRcv(); 
    ipThread.IsBackground = true; 
    ipThread.Priority = ThreadPriority.BelowNormal; 
    ipThread.Start(); 
} 

void ipSocketRcv() 
{ 
    while (true) 
    { 
    if receive data... 
     myTextBox.Text = data; **//This does not work** 
     finished = true; 
    } 
} 

protected void SendCmd_Click(object sender, EventArgs e) 
{ 
    //send command over ip connection when button pressed   
    waitToLoad(); //Then wait for data to be received before rendering page 
} 

private void waitToLoad() 
{ 
    while (!finished) 
    { 
     Thread.Sleep(0); 
    } 
    finished = false; 
} 
+0

[他のスレッドからのテキストボックスへの書き込み?](http://stackoverflow.com/questions/519233/writing-to-a-textbox-from-another-thread) –

+1

これは次のように重複していません質問はウェブフォームに関するものです。 – VMAtm

答えて

2

要求がすべてのスレッドを処理した後、新たな要求を待機中に浮遊しているように、このアプローチは、Webフォームでは動作しません。あなたは更新のためにサーバー側を呼び出すポーリングjavascriptを導入すべきです。

また、WebアプリケーションのIPソケットレシーバーから移動する必要があります。あなたのオプションは、デーモン(Windowsサービス)やWCFバインディングのようなものです。

+0

したがって、スレッドはサーバ上でバックグラウンドで実行され続けることはありません... – Viper

+0

しかし、スレッドを実装した方法は、ほとんどの場合、要求中にすべての作業を行うことです。私がipソケットレシーバー上の迷惑なデータを見ることはほんの数回しかありませんでした(私はスレッドが良い考えだと思った唯一の理由でした)。それでも私はスレッドからデータを取得し、それをテキストボックスに入れることができるはずですか?私はInvokeRequiredが動作しないことを知っています。提案... – Viper

+0

スレッドはリクエスト処理中にのみ機能します。だから*おそらく*、あなたはipソケットからデータを得ることができますが、私はこれに依存しません。サーバー側で何らかのサービスへのajax呼び出しを作成し、jqueryでテキストボックスを更新します。 – VMAtm

関連する問題