2011-01-06 7 views
0

グラフを表示する小さなWebアプリケーションを構築しました。私はアプリのスーパーユーザーが完全なデータ更新を行うことが有用かもしれないと考えていましたが、このプロセスは完了するまでに約10分かかります。おそらく、ユーザーが新しいスレッドを開始するボタンをクリックしてデータの更新を行い、その後のクリックがスレッドを強制終了し、データの挿入プロセスを再開すると考えていました。ユーザーは自由にそのサイトについて閲覧し、データが入力されたときにチャートを表示することができます。C#Webアプリケーションでスレッドを管理するにはどうすればよいですか?

このようなことを達成する簡単な方法はありますか?

答えて

1

[OK]を、私はどちらかの答えを使用しなかったので、ここで私がやったことです。後続のクリックが現在実行中のクリックの代わりに終了する方が良いと判断しました。あなたの答えのみんなありがとう。

//code behind 
protected void butRefreshData_Click(object sender, EventArgs e) 
{ 
    Thread t = new Thread(new ThreadStart(DataRepopulater.DataRepopulater.RepopulateDatabase)); 
    t.Start();  
} 

//DataRepopulater.cs 
namespace DataRepopulater 
{ 
    public static class DataRepopulater 
    { 
    private static string myLock = "My Lock"; 
    public static void RepopulateDatabase() 
    { 
     if(Monitor.TryEnter(myLock)) 
     { 
      DoWork(); 
      Monitor.Exit(myLock); 
     } 
    } 
} 
1

このようなことをするためにASP.NETをねじれさせることはできますが、ASP.NET開発のいくつかの一般的なルールに違反し、実際にサーバーファームに問題を引き起こす可能性があります。

したがって、最も明白な方法は、Webサービスでこの作業を行うことです。必要に応じてメソッドがHTMLのチャンクを返すようにすることができます。ステータスメソッドを追加して、スレッドの進行状況を確認することもできます。

+0

私はDB refeshコードをWebServiceに入れています。どのように私はこれを消費するだろうか?クライアント上のJavascriptまたはサーバー上のOnClickイベント? –

+0

JQueryの "ajax"メソッドは、JSONで動作するようにWebメソッドを設計する場合(非常に簡単)にうまくいきます。ポストバックや更新パネルは慎重でないと非常に遅くなる可能性があるので、可能であればjavascriptを強く推奨します。 –

1

その他のオプションには次のようなものがあります。データベースサーバーへの強力な処理(これはOLAPをよく使うかもしれないと思うかもしれません)、または別の安易なトリックがクリックをセットアップして、サーバー。あなたは環境についていくつかの詳細を提供できますか?単一のサーバーですか?データストレージプラットフォーム、.netのバージョン?

+0

基本的に、データは複数のOracleインスタンス上の混乱と共有ドライブ上のいくつかのCSVファイルに格納されます。私は現在、これらのソースからすべてのデータを取り出し、それをクリーンアップし、スタンドアロンのSQL 2005サーバーボックス上の初歩的なスタークマに置くコマンドラインC#app(ローカルで実行される)を持っています。 Webサーバーは.Net 3.5です。 SQLServerまたはOracleボックスをホストしているサーバーにアクセスできません。 –

+0

データを取得することができるので、* DBサーバーに*アクセスできます:)しかし、おそらくSSISパッケージやSPを作成できないため、クリックを打ち切るように設定することをお勧めしますあなたのコマンドラインアプリ。または、それをコマンドを受け入れるサービスに変換します(私はそれをお勧めしませんが、WCFサービスでも可能です) – jbehren

関連する問題