我正在使用 List<string> DocPathList = new List<string>();
private int page;
private void btn_Print_Click(object sender, EventArgs e)
{
DirectoryInfo SourceDirectory = new DirectoryInfo(@"C:\image\Shared_Directory\Printing_Folder\");
FileInfo[] Files = SourceDirectory.GetFiles("*.tif"); //Getting Tif files
foreach (FileInfo file in Files)
{
DocPathList.Add(SourceDirectory + file.Name);
}
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.Show();
}
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.DrawImage(Image.FromFile(DocPathList[page]), e.MarginBounds);
page++;
e.HasMorePages = page < DocPathList.Count;
}
private void printDocument1_BeginPrint(object sender, PrintEventArgs e)
{
page = 0;
}
。在我的表单中,我有一个按钮,可以在目录中打印所有tif图像。我想告诉我的应用程序在取消打印作业或完成打印时释放图像。我认为FileInfo可能是这里的问题。我怎样才能完成这项任务?
printPreviewDialog1.Show();
如果我添加这行代码,它会释放图像。如果我点击按钮一次就可以了。但是,如果我想第二次按下打印按钮 using (var image = Image.FromFile(DocPathList[page]))
{
e.Graphics.DrawImage(image, e.MarginBounds);
page++;
e.HasMorePages = page < DocPathList.Count;
}
则会抛出错误:
抛出异常:&#39; System.ObjectDisposedException&#39;在System.Windows.Forms.dll
中
$ g++ -o build/server/auction_manager.o -c -g -v -MMD -I src -I include -I /usr/local/include/odb -I /usr/local/Cellar/protobuf/3.1.0/include -D ENABLE_TRACE_LOGGING -D AUCTION_APP__ENABLE_ODB -std=c++11 src/server/auction_manager.cpp
Using built-in specs.
COLLECT_GCC=g++-4.8
Target: x86_64-apple-darwin15.4.0
Configured with: ../configure --build=x86_64-apple-darwin15.4.0 --prefix=/usr/local/Cellar/gcc48/4.8.5 --libdir=/usr/local/Cellar/gcc48/4.8.5/lib/gcc/4.8 --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-4.8 --with-gmp=/usr/local/opt/gmp4 --with-mpfr=/usr/local/opt/mpfr2 --with-mpc=/usr/local/opt/libmpc08 --with-cloog=/usr/local/opt/cloog018 --with-isl=/usr/local/opt/isl011 --with-system-zlib --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --with-pkgversion='Homebrew gcc48 4.8.5' --with-bugurl=https://github.com/Homebrew/homebrew-versions/issues --with-build-config=bootstrap-debug --enable-plugin --disable-nls --enable-multilib
Thread model: posix
gcc version 4.8.5 (Homebrew gcc48 4.8.5)
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.11.6' '-o' 'build/server/auction_manager.o' '-c' '-g' '-v' '-MMD' '-I' 'src' '-I' 'include' '-I' '/usr/local/include/odb' '-I' '/usr/local/Cellar/protobuf/3.1.0/include' '-D' 'ENABLE_TRACE_LOGGING' '-D' 'AUCTION_APP__ENABLE_ODB' '-std=c++11' '-shared-libgcc' '-mtune=core2'
/usr/local/Cellar/gcc48/4.8.5/libexec/gcc/x86_64-apple-darwin15.4.0/4.8.5/cc1plus -quiet -v -I src -I include -I /usr/local/include/odb -I /usr/local/Cellar/protobuf/3.1.0/include -MMD build/server/auction_manager.d -MQ build/server/auction_manager.o -D__DYNAMIC__ -D ENABLE_TRACE_LOGGING -D AUCTION_APP__ENABLE_ODB src/server/auction_manager.cpp -fPIC -feliminate-unused-debug-symbols -quiet -dumpbase auction_manager.cpp -mmacosx-version-min=10.11.6 -mtune=core2 -auxbase-strip build/server/auction_manager.o -g -std=c++11 -version -o /var/folders/pq/7_55zz516wj21251nl6qmfxc0000gn/T//ccjIc5CR.s
GNU C++ (Homebrew gcc48 4.8.5) version 4.8.5 (x86_64-apple-darwin15.4.0)
compiled by GNU C version 4.8.5, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/Cellar/gcc48/4.8.5/lib/gcc/4.8/gcc/x86_64-apple-darwin15.4.0/4.8.5/../../../../../../x86_64-apple-darwin15.4.0/include"
#include "..." search starts here:
#include <...> search starts here:
src
include
/usr/local/include/odb
/usr/local/Cellar/protobuf/3.1.0/include
/usr/local/Cellar/gcc48/4.8.5/lib/gcc/4.8/gcc/x86_64-apple-darwin15.4.0/4.8.5/../../../../../../include/c++/4.8.5
/usr/local/Cellar/gcc48/4.8.5/lib/gcc/4.8/gcc/x86_64-apple-darwin15.4.0/4.8.5/../../../../../../include/c++/4.8.5/x86_64-apple-darwin15.4.0
/usr/local/Cellar/gcc48/4.8.5/lib/gcc/4.8/gcc/x86_64-apple-darwin15.4.0/4.8.5/../../../../../../include/c++/4.8.5/backward
/usr/local/Cellar/gcc48/4.8.5/lib/gcc/4.8/gcc/x86_64-apple-darwin15.4.0/4.8.5/include
/usr/local/include
/usr/local/Cellar/gcc48/4.8.5/include
/usr/local/Cellar/gcc48/4.8.5/lib/gcc/4.8/gcc/x86_64-apple-darwin15.4.0/4.8.5/include-fixed
/usr/include
/System/Library/Frameworks
/Library/Frameworks
End of search list.
GNU C++ (Homebrew gcc48 4.8.5) version 4.8.5 (x86_64-apple-darwin15.4.0)
compiled by GNU C version 4.8.5, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: b331b823481e84001cac67f078515d00
In file included from src/server/auction_manager.cpp:16:0:
src/query/account-odb.hpp:17:2: error: #error ODB runtime version mismatch
#error ODB runtime version mismatch
^
In file included from src/server/auction_manager.cpp:17:0:
src/query/auction-odb.hpp:17:2: error: #error ODB runtime version mismatch
#error ODB runtime version mismatch
^
In file included from src/query/auction-odb.hpp:25:0,
from src/server/auction_manager.cpp:17:
src/query/bid-odb.hpp:17:2: error: #error ODB runtime version mismatch
#error ODB runtime version mismatch
例如,如果我取消我的打印然后转到文件浏览以删除/重命名/修改此文件我将在下面的错误。 目前我必须关闭我的应用程序然后我可以修改tif文件。
答案 0 :(得分:1)
在任何情况下,您都需要将image
封装在编辑中描述的using
块中,因为Image.FromFile()
将keep a lock on the file until the image is disposed。< / p>
您看到的ObjectDisposedException
来自printPreviewDialog
,与加载图片无关。你可以......
(a)使用printPreviewDialog1.ShowDialog(this)
代替以模态方式显示对话框(即,在对话框打开时阻止输入到父窗口),在关闭对话框后不会对其进行处理
或,(b)使用printPreviewDialog.Show(this)
以非模态方式显示对话框,就像现在一样,但添加以下回调:
private void printPreviewDialog1_FormClosing(object sender, FormClosingEventArgs e)
{
// Don't close and dispose the form if the user is just dismissing it. Hide instead.
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
printPreviewDialog1.Hide();
}
}
答案 1 :(得分:0)