私は、 "クライアント"からの呼び出しを受け取り、それを要求する "サーバー"プログラムを持っています。これらの呼び出しが実際にどのように行われているのだろうか?新しいスレッドが作成されていますか?クライアントからの着信 - 同じスレッドまたは異なるスレッド?
これらの呼び出しは、サーバで特定の条件が満たされるまで待つ必要があり、私が行うと質問していますwhile(conditionIsNotMet) Thread.sleep(x);
- 私はメインスレッドの実行にいくつかの問題があることに気付いています。問題は、実際に待機している間に、メインの実行スレッドは非常に遅く、何らかの方法で中断されて悪い結果が生じることです。
これはアーキテクチャです:
私の質問は、(それがのほとんどを実行しているメインスレッド、コール(紫矢印)(サービスを作成した)メインスレッドを中断しない、あります新しいスレッドを作成しますか?
さらに、while(conditionIsNotMet) Thread.sleep(x);
が問題を引き起こす原因が考えられますか?
同じ結果を得るには、より良い方法がありますか?
もっとコード:
public class MyServerCommands : MyInterface
{
public void SomeFunction(some parameters)
{
while (conditionIsNotMet)
{
Thread.Sleep(SomeTime);
}
// some more code - mainly, update a google spreadsheet
}
}
public partial class ProgramA : Form
{
// code for starting WCF server, creating background workers, and firing them
private void BkwMain_DoWork(object sender, DoWorkEventArgs e)
{
if (conditionIsNotMet)
{
// do work, mainly update google sheet
}
conditionIsNotMet = false;
}
}
UPDATE:だから、少し周りを再生した後、私は、サーバーを作成するスレッドが、それのコマンドを共有する必要があります一つであると結論づけることができると思います。私のアプリ(プログラムA)ではUIを担当するメインスレッドであったため、whileループが終了するまでUIが遅れてしまいました。 私の解決策は、今のところ、別のスレッド、または(親の)フォームでサーバーを作成し、それを隠そうとすることです(遅くなるので)。 もっと良い解決策がある場合は、私に知らせてください。
UPDATE /明確化:Host = new ServiceHost(typeof(MyServerCommands), baseAddress);
ありがとう、私はこれらのリンクを見ていきます。 –