Re: TKFP.DLLについて ( No.1 ) |
- 日時: 2007/09/14 12:29
- 名前: Toki◆pRU.c9X.EOI
- 通信中の経過を表示するには転送を行うスレッドと、経過の表示を行うスレッドを分けて
TKFP.Net.FtpClientクラスのSendDataLength ,ReceiveDataLength を監視するようにしてください
>また、サンプルにあった、コードでNOOPを送信すると、エラーが発生します。 詳しく状況を教えていただけますでしょうか?
最後に、使用中のバージョンをお教えください
|
Re: TKFP.DLLについて ( No.2 ) |
- 日時: 2007/09/14 13:20
- 名前: たか
- 早速の返事ありがとうございます
>通信中の経過を表示するには転送を行うスレッドと、経過の表示を行うスレッドを分けて 現在、質問のほうの「1」が表示をするためのメインで、「2」のほうがサブスレッドなので もう少し分けないといけないみたいですね。
>詳しく状況を教えていただけますでしょうか? すみませんでした。 【プログラム名】 TKFP.DLL 【バージョン 】 1.3.7 【作成日 】 2007/03/14 ひとつ古いみたいですね。最新にしてみます。 状況ですが、イベントの状況を確認したかったのでbutton1_Clickのコードを下記のように修正(変更したところのみ記載) FtpClient.ListCacheValidityInterval = 1 FtpClient.FileSystemCacheValidityInterval = 1 FtpClient.KeepAlive = True FtpClient.KeepAliveInterval = 5 接続した後で、5秒ほどたつと
「有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'richTextBox1' がアクセスされました。」 と表示されます。
|
Re: TKFP.DLLについて ( No.3 ) |
- 日時: 2007/09/14 15:19
- 名前: たか
- バージョンですが
最新でも同じでした
|
Re: TKFP.DLLについて ( No.4 ) |
- 日時: 2007/09/14 15:41
- 名前: Toki◆pRU.c9X.EOI
- >現在、質問のほうの「1」が表示をするためのメインで、「2」のほうがサブスレッドなので
もう少し分けないといけないみたいですね。
メインレッドでタイマーなどを実行し、FtpClientクラスの転送量を確認すれば良いと思います。 Tipsを参考にしてください http://uwa.potetihouse.com/samplecode/tkfp/transfermonitor.html
>「有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'richTextBox1' がアクセスされました。」 >と表示されます。
これは、ライブラリの問題ではなく、マルチスレッドでのコントロールへの操作の問題です。 KeepAlive をTrueにした場合TKFP.DLLで接続を維持するコマンドは、別のスレッドから自動的に発行されます。 このため、通信ログの発生イベントなどは、メインスレッド以外からの実行となり、処理中にコントロールへの操作などがあると、エラーとなります。
この辺が参考になると思います http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html
|
Re: TKFP.DLLについて ( No.5 ) |
- 日時: 2007/09/19 11:39
- 名前: たか
- お世話になります
>これは、ライブラリの問題ではなく、マルチスレッドでのコントロールへの操作の問題です。 >KeepAlive をTrueにした場合TKFP.DLLで接続を維持するコマンドは、別のスレッドから自動的に発行され>ます。
それは、よくわかっているつもりなんですが・・・ DLLのサンプル{Sample_vb_2005}は、少し直さないとKEEPALIVE設定できないということですね? Sample_vb_2005はスレッドを使っていないみたいでしたので、そのままKeepAliveをONにしてどんなメッセージが飛んでいるか確認をしようと思って、先の質問の部分を書き換えてみたのですが、自分でSample_vb_2005を改造して、スレッドを作成するなりして、実行しないとだめって言うことですよね? INVOKEで実行するとか。了解しました。
|
Re: TKFP.DLLについて ( No.6 ) |
- 日時: 2007/09/19 12:19
- 名前: Toki◆pRU.c9X.EOI
- ご指摘のとおりサンプルのプログラムでは、KeepAliveは正常に動作しません。
最初は、マルチスレッドを考慮して、サンプルを作成しようとしましたが、 本筋でない部分が複雑になりすぎるような気がして、記述しませんでした。
別スレッドで発生したイベントのコントロールへの処理は 私は簡単に逃げるときは、Invokeによる再起読み出しをしています。 サンプルの受信ログイベントの場合は以下のコードをメソッドの先頭に追加してますね
if (this.InvokeRequired) { this.Invoke(new TKFP.Net.MessageReceiveHandler(FtpClient_MessageReceive), sender, e); }
|
Re: TKFP.DLLについて ( No.7 ) |
- 日時: 2007/09/26 09:12
- 名前: たか
- 返事が遅くなりました。
イベントでと思いましたが、コールバックもしたいので、 システムのサスペンドウェイトを利用して、DataLengthを利用することにしました。 bbpも計算して表示できるようになったので、利用するのには問題ない程度になりました。 ディレクトリの作り方で少し迷いましたが。できるようになったので 後はファイルの削除ぐらいです。(FTPが小さいので2日たったら消したいため) 本当にありがとうございました
|