1

私は C# 2010 でチャット ソフトウェアに取り組んでおり、すべての受信メッセージが固定タイマーで受信されます。ユーザーに送信するメッセージを入力し、文の入力中に着信メッセージのタイマー呼び出しが発生した場合、すべてが数秒間停止してから再開します。

タイマーとテキストボックスへの入力を独立させる方法はありますか?

4

5 に答える 5

2

System.Forms.Timer の代わりに System.Timers.Timer を使用します。System.Forms.Timer は UI スレッドで実行されますが、System.Timers.Timer は別のスレッドで実行されます。

于 2012-06-13T10:51:43.803 に答える
1

考えてみると、タイマーは最善の解決策ではないかもしれません。

ある種のメッセージングシステムを使用することをお勧めします。.NET で使用される Windows 組み込みテクノロジは、Microsoft Message Queue です。

NServiceBusやオープン ソースのMassTransitなど、MSMQ をより快適に使用できるようにするために、MSMQ の上にある既存のフレームワークがあります。

これにより、受信を UI スレッドから切り離し、クライアント アプリケーションでより応答性の高い UI を実現できます。

于 2012-06-13T10:59:15.927 に答える
0

winforms を使用している場合は、別のスレッドでメッセージを取得してみてください

Thread thread = new Thread(new ThreadStart(GetMessage));
thread.Start();

public void GetMessage()
{
     //Message showing code goes here 
      Thread.Sleep(10000);
      GetMessage();
}
于 2012-06-13T10:54:11.463 に答える
0

タイマーを独立させる必要はありません。タイマーが何をするかが必要です。

timer.Tick イベント内にこれを追加します

Task.Factory.StartNew( () =>
{
  //do what you need to do here ie.
      string something ="Hello";

      this.BeginInvoke( new Action(() =>
         {
             //update textbox here
             textBox1.Text=something;
         }));

 });

この名前空間が必要になります

using System.Threading.Tasks;
于 2012-06-13T10:54:26.237 に答える
0

既に投稿された提案はすべて同じ問題を対象としていますが、アプリケーションがハングする実際の原因については、ここではまだ直接言及されていません。

これは、簡単に言えば、同じスレッドで作業が多すぎるということです。

TimerTickあなたの場合、タイマーイベントはUIスレッドで処理され、CPU負荷が発生するため、イベント処理メソッドで発生するものに貴重なCPU時間が奪われるため、UIコントロールの入力が遅くなります。

したがって、解決策は複数のスレッドを使用することです。

MSMQ を使用する代わりにタイマー アーキテクチャを維持する必要がある場合は (これを強くお勧めします)、次の MSDN 記事をお勧めします

この記事は「数日前」のものですが、原則は今日でも完全に有効です。

.NET 4.x バージョンで作業している場合は、Task Parallel Libraryを使用して、複数のスレッドでの作業を容易にすることもできます。

間もなく登場する .NET 4.5 では、さらに快適な await および asyc キーワードも提供されます: Async および Await を使用した非同期プログラミング

于 2012-06-13T12:11:44.603 に答える