下面的代码在控制台应用程序中运行良好,当我在 WCF 中运行相同的代码时,它卡在数据源上open 方法:
// Create appId
Version ver = new Version();
var appId = TWIdentity.Create(DataGroups.Image | DataGroups.Control, ver, "bla bla", "bla", "bla", "");
// Attach
var session = new TwainSession(appId);
List<Image> scannedImages = new List<Image>();
session.TransferReady += (s, e) =>
{
Debug.Print("TransferReady is a go.");
};
session.DataTransferred += (s, e) =>
{
if (e.NativeData != IntPtr.Zero)
{
// Handle image data
if (e.NativeData != IntPtr.Zero)
{
var stream = e.GetNativeImageStream();
if (stream != null)
{
//Save Image to list
scannedImages.Add(Image.FromStream(stream));
}
}
}
};
// Open it
session.Open();
DataSource myDS = session.FirstOrDefault();
myDS.Open();
// Start Scan
myDS.Enable(SourceEnableMode.NoUI, false, IntPtr.Zero);
//Close Session
myDS.Close();
我也试过禁用防火墙,但没有成功。没有显示错误,只是无限加载。 有什么建议吗?
也许你可以使用
TwainSession.ShowSourceSelect()
来显示twaindsm的selectdialog,我在winform中使用这种方法;然后你可以检查数据源是否为空以设置默认源哪个对话框最后选择源,只需使用twainSession.DefaultSource
;我想你可以在 SouceDisabled 事件中关闭数据源,但 TwainSession 永远不需要关闭它,您可以在应用程序退出或退出时关闭它