The project of U-WA-
http://uwa.potetihouse.com/
トップページ > 過去ログ > 記事閲覧
アイコン TKFP.DLLについて
日時: 2007/09/14 11:46
名前: たか

TKFP.DLLを使用してFTPにアップロードをするためのソフトを作成しておりますが
馬鹿でかいファイルを送信しているときに、フリーズしたように見えるので、プログレシブバーを表示したいと思っております。
現在考えているのは、アップする前のファイルのバイト数をプレグレシブバーの最大値にして
アップした後にFTP上にできたファイルのバイト数をプログレシブの値にすればいいのでは?
と思って作成していますが、TKFP.DLLがファイルをアップしている間のレスポンスがつかめません。
どのようにしたら、よろしいでしょうか?

また、サンプルにあった、コードでNOOPを送信すると、エラーが発生します。

今の動作はこんな感じです
1.メニューよりファイルを選択
2.スレッドを作成し別スレッドでFTP.DLLを使用する。(コールバックを使ってモジュールを戻す)

ここでアップしている間、何もできなくなってしまいます。

Page: 1 |

ファイル 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日たったら消したいため)
本当にありがとうございました

Page: 1 |